{
  "schemaVersion": 1,
  "generatedFrom": "src/data/catalogue.js",
  "wiki": {
    "title": "Co.Property internal wiki",
    "version": "2026.10.20.2",
    "date": "20 October 2026"
  },
  "page": {
    "stableId": "workspace-pr#page",
    "pageId": "workspace-pr",
    "pageTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
    "pageSlug": "contribution/workspace-and-pr",
    "sectionId": "page",
    "sectionTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
    "sectionProse": [
      "A safe change begins by verifying the remote target, then uses an isolated worktree outside the installed project. It is tested, submitted as a pull request, and reviewed before a person releases it.",
      "Turn the access contract into a careful contribution route that protects the installed runtime, avoids shared-account assumptions, and preserves human review.",
      "Verify the remote target, create an isolated worktree outside the installed project, run baseline and targeted tests, submit a PR, then obtain review and a separately approved release. There is no automatic deployment.",
      "Verify the target before creating a workspace",
      "Before any remote work, verify the hostname, project path, and repository status. The target is the office mini project at `/Users/coproperty/Projects/coproperty-office-os`, reached as user `coproperty` through the owner-confirmed `coproperty-office` SSH contract.",
      "This first check prevents a familiar alias, stale terminal, or shared account from becoming an unexamined assumption. It is read-only orientation, not permission to change the installed project.",
      "A separate worktree protects the installed runtime",
      "Create the task worktree outside the installed project. Do not edit, install into, or otherwise modify the installed runtime. A separate worktree reduces accidental interference between tasks. Because teammates share a Unix account, it is not a security boundary: processes and permissions remain shared. Keep development paths, test ports, configuration, and installed services distinct.",
      "This rule gives the contributor a reversible place to test a change and keeps a currently installed service from being altered as a side effect of development.",
      "Baseline and targeted regressions turn intent into reviewable evidence",
      "Run the baseline tests that protect the existing surface and focused regressions for the change. UI work needs browser and mobile checks. Connector work needs duplicate, failure, and freshness fixtures. A successful happy path alone is not enough to establish safe operational behavior.",
      "Every change goes through a PR with test evidence. Shesh reviews and merges initially. The team must follow this process consistently.",
      "Review and release remain separate decisions",
      "A PR is a request for review, not an automatic deployment. No automatic deployments, LINE sends, credential changes, or runtime installs are part of this contribution path. A separately approved release should be planned only after review and the appropriate operational checks.",
      "The contextual work panel can draft an “Implement and submit PR” request, but it cannot submit the PR or release anything. That boundary is intentional."
    ],
    "version": "2026.10.20.2",
    "date": "20 October 2026",
    "status": "Checked",
    "currentStatus": "Checked — every proposed change follows the documented test and review process.",
    "proposedStatus": "Shesh reviews and merges initially. Follow the review process for every change, then agree the release separately.",
    "expectedOutcome": "A contributor can prepare a bounded change without modifying production/runtime surfaces or assuming an automatic deployment.",
    "tests": [
      "Check baseline and targeted regressions are required before PR submission.",
      "Check UI changes include browser/mobile checks and connectors include duplicate/failure/freshness fixtures."
    ],
    "sourcePointers": [
      "README.md",
      "pyproject.toml",
      "dashboard/package.json",
      "tests/test_workspace_ui.cjs",
      "tests/test_browser_policy.cjs",
      "Handoff / pages/access.html",
      "Handoff / pages/infrastructure.html",
      "Handoff / START-HERE.html"
    ],
    "related": [
      {
        "id": "access",
        "title": "Personal access: choose the least-privileged path",
        "summary": "Most staff should use approved dashboard access. Technical operators use their own Tailscale identity and SSH key to reach the office mini only after owner approval.",
        "status": "Checked",
        "path": "/contribution/access/"
      },
      {
        "id": "sop-learning",
        "title": "SOP learning: turn observations into a better next step",
        "summary": "Learning connects incidents, reports, and repeated exceptions to a reviewed procedure. It prevents a useful lesson from being stranded in a one-off conversation.",
        "status": "Checked",
        "path": "/workflows/sop-learning/"
      },
      {
        "id": "services",
        "title": "Service directory: approved destinations, not shared access",
        "summary": "This directory names the approved service destinations used around Co.Property. Every destination requires an existing authorised account or approved auth; the wiki never stores tokens, credentials, or private logs.",
        "status": "Checked",
        "path": "/reference/service-directory/"
      }
    ],
    "sshTarget": {
      "alias": "coproperty-office",
      "hostname": "copropertys-mac-mini.tail3ab9e5.ts.net",
      "user": "coproperty",
      "projectPath": "/Users/coproperty/Projects/coproperty-office-os",
      "codexPath": "/Users/coproperty/.local/bin/codex",
      "hostFingerprint": "SHA256:UUFmlsdclEmRtyRWNqAdVYUoFxeUkRUGhbzObQPsOPg",
      "requiredChecks": [
        "Verify the hostname, project path, and repository status before any work.",
        "Create an isolated task worktree outside the installed project.",
        "Never modify the installed runtime from this contribution path."
      ]
    }
  },
  "sections": {
    "safe-start": {
      "stableId": "workspace-pr#safe-start",
      "pageId": "workspace-pr",
      "pageTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
      "pageSlug": "contribution/workspace-and-pr",
      "sectionId": "safe-start",
      "sectionTitle": "Verify the target before creating a workspace",
      "sectionProse": [
        "Before any remote work, verify the hostname, project path, and repository status. The target is the office mini project at `/Users/coproperty/Projects/coproperty-office-os`, reached as user `coproperty` through the owner-confirmed `coproperty-office` SSH contract.",
        "This first check prevents a familiar alias, stale terminal, or shared account from becoming an unexamined assumption. It is read-only orientation, not permission to change the installed project."
      ],
      "version": "2026.10.20.2",
      "date": "20 October 2026",
      "status": "Checked",
      "currentStatus": "Checked — the contract is documented and must be verified for each actual session.",
      "proposedStatus": "Stop and ask an owner when hostname, path, fingerprint, or status do not match the expected contract.",
      "expectedOutcome": "A contributor knows exactly which machine and project they are looking at before making a worktree.",
      "tests": [
        "Check contextual drafts include hostname, path, alias, user, and fingerprint.",
        "Check no draft contains an automatic remote command or an execution API."
      ],
      "sourcePointers": [
        "README.md",
        "pyproject.toml",
        "dashboard/package.json",
        "tests/test_workspace_ui.cjs",
        "tests/test_browser_policy.cjs",
        "Handoff / pages/access.html",
        "Handoff / pages/infrastructure.html",
        "Handoff / START-HERE.html"
      ],
      "related": [
        {
          "id": "access",
          "title": "Personal access: choose the least-privileged path",
          "summary": "Most staff should use approved dashboard access. Technical operators use their own Tailscale identity and SSH key to reach the office mini only after owner approval.",
          "status": "Checked",
          "path": "/contribution/access/"
        },
        {
          "id": "sop-learning",
          "title": "SOP learning: turn observations into a better next step",
          "summary": "Learning connects incidents, reports, and repeated exceptions to a reviewed procedure. It prevents a useful lesson from being stranded in a one-off conversation.",
          "status": "Checked",
          "path": "/workflows/sop-learning/"
        },
        {
          "id": "services",
          "title": "Service directory: approved destinations, not shared access",
          "summary": "This directory names the approved service destinations used around Co.Property. Every destination requires an existing authorised account or approved auth; the wiki never stores tokens, credentials, or private logs.",
          "status": "Checked",
          "path": "/reference/service-directory/"
        }
      ],
      "sshTarget": {
        "alias": "coproperty-office",
        "hostname": "copropertys-mac-mini.tail3ab9e5.ts.net",
        "user": "coproperty",
        "projectPath": "/Users/coproperty/Projects/coproperty-office-os",
        "codexPath": "/Users/coproperty/.local/bin/codex",
        "hostFingerprint": "SHA256:UUFmlsdclEmRtyRWNqAdVYUoFxeUkRUGhbzObQPsOPg",
        "requiredChecks": [
          "Verify the hostname, project path, and repository status before any work.",
          "Create an isolated task worktree outside the installed project.",
          "Never modify the installed runtime from this contribution path."
        ]
      }
    },
    "isolated-worktree": {
      "stableId": "workspace-pr#isolated-worktree",
      "pageId": "workspace-pr",
      "pageTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
      "pageSlug": "contribution/workspace-and-pr",
      "sectionId": "isolated-worktree",
      "sectionTitle": "A separate worktree protects the installed runtime",
      "sectionProse": [
        "Create the task worktree outside the installed project. Do not edit, install into, or otherwise modify the installed runtime. A separate worktree reduces accidental interference between tasks. Because teammates share a Unix account, it is not a security boundary: processes and permissions remain shared. Keep development paths, test ports, configuration, and installed services distinct.",
        "This rule gives the contributor a reversible place to test a change and keeps a currently installed service from being altered as a side effect of development."
      ],
      "version": "2026.10.20.2",
      "date": "20 October 2026",
      "status": "Checked",
      "currentStatus": "Checked — the separation requirement is explicit in the approved contribution contract.",
      "proposedStatus": "Use a fresh, named isolated workspace for each bounded task and remove it only through the normal reviewed process.",
      "expectedOutcome": "Development work does not alter the running installed project.",
      "tests": [
        "Check a PR diff has no changes to installed runtime paths or generated local state.",
        "Check a new task begins from a verified clean isolated worktree."
      ],
      "sourcePointers": [
        "README.md",
        "pyproject.toml",
        "dashboard/package.json",
        "tests/test_workspace_ui.cjs",
        "tests/test_browser_policy.cjs",
        "Handoff / pages/access.html",
        "Handoff / pages/infrastructure.html",
        "Handoff / START-HERE.html"
      ],
      "related": [
        {
          "id": "access",
          "title": "Personal access: choose the least-privileged path",
          "summary": "Most staff should use approved dashboard access. Technical operators use their own Tailscale identity and SSH key to reach the office mini only after owner approval.",
          "status": "Checked",
          "path": "/contribution/access/"
        },
        {
          "id": "sop-learning",
          "title": "SOP learning: turn observations into a better next step",
          "summary": "Learning connects incidents, reports, and repeated exceptions to a reviewed procedure. It prevents a useful lesson from being stranded in a one-off conversation.",
          "status": "Checked",
          "path": "/workflows/sop-learning/"
        },
        {
          "id": "services",
          "title": "Service directory: approved destinations, not shared access",
          "summary": "This directory names the approved service destinations used around Co.Property. Every destination requires an existing authorised account or approved auth; the wiki never stores tokens, credentials, or private logs.",
          "status": "Checked",
          "path": "/reference/service-directory/"
        }
      ],
      "sshTarget": {
        "alias": "coproperty-office",
        "hostname": "copropertys-mac-mini.tail3ab9e5.ts.net",
        "user": "coproperty",
        "projectPath": "/Users/coproperty/Projects/coproperty-office-os",
        "codexPath": "/Users/coproperty/.local/bin/codex",
        "hostFingerprint": "SHA256:UUFmlsdclEmRtyRWNqAdVYUoFxeUkRUGhbzObQPsOPg",
        "requiredChecks": [
          "Verify the hostname, project path, and repository status before any work.",
          "Create an isolated task worktree outside the installed project.",
          "Never modify the installed runtime from this contribution path."
        ]
      }
    },
    "tests-and-pr": {
      "stableId": "workspace-pr#tests-and-pr",
      "pageId": "workspace-pr",
      "pageTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
      "pageSlug": "contribution/workspace-and-pr",
      "sectionId": "tests-and-pr",
      "sectionTitle": "Baseline and targeted regressions turn intent into reviewable evidence",
      "sectionProse": [
        "Run the baseline tests that protect the existing surface and focused regressions for the change. UI work needs browser and mobile checks. Connector work needs duplicate, failure, and freshness fixtures. A successful happy path alone is not enough to establish safe operational behavior.",
        "Every change goes through a PR with test evidence. Shesh reviews and merges initially. The team must follow this process consistently."
      ],
      "version": "2026.10.20.2",
      "date": "20 October 2026",
      "status": "Checked",
      "currentStatus": "Checked — baseline tests, focused checks, and PR review are required.",
      "proposedStatus": "Include expected outcome, test evidence, and known limitation in every PR description.",
      "expectedOutcome": "Reviewers can see what changed, how it was tested, and what remains unverified.",
      "tests": [
        "Run baseline plus scope-specific checks before opening the PR.",
        "For UI, capture browser and mobile evidence; for connectors, keep duplicate/failure/freshness fixtures."
      ],
      "sourcePointers": [
        "README.md",
        "pyproject.toml",
        "dashboard/package.json",
        "tests/test_workspace_ui.cjs",
        "tests/test_browser_policy.cjs",
        "Handoff / pages/access.html",
        "Handoff / pages/infrastructure.html",
        "Handoff / START-HERE.html"
      ],
      "related": [
        {
          "id": "access",
          "title": "Personal access: choose the least-privileged path",
          "summary": "Most staff should use approved dashboard access. Technical operators use their own Tailscale identity and SSH key to reach the office mini only after owner approval.",
          "status": "Checked",
          "path": "/contribution/access/"
        },
        {
          "id": "sop-learning",
          "title": "SOP learning: turn observations into a better next step",
          "summary": "Learning connects incidents, reports, and repeated exceptions to a reviewed procedure. It prevents a useful lesson from being stranded in a one-off conversation.",
          "status": "Checked",
          "path": "/workflows/sop-learning/"
        },
        {
          "id": "services",
          "title": "Service directory: approved destinations, not shared access",
          "summary": "This directory names the approved service destinations used around Co.Property. Every destination requires an existing authorised account or approved auth; the wiki never stores tokens, credentials, or private logs.",
          "status": "Checked",
          "path": "/reference/service-directory/"
        }
      ],
      "sshTarget": {
        "alias": "coproperty-office",
        "hostname": "copropertys-mac-mini.tail3ab9e5.ts.net",
        "user": "coproperty",
        "projectPath": "/Users/coproperty/Projects/coproperty-office-os",
        "codexPath": "/Users/coproperty/.local/bin/codex",
        "hostFingerprint": "SHA256:UUFmlsdclEmRtyRWNqAdVYUoFxeUkRUGhbzObQPsOPg",
        "requiredChecks": [
          "Verify the hostname, project path, and repository status before any work.",
          "Create an isolated task worktree outside the installed project.",
          "Never modify the installed runtime from this contribution path."
        ]
      }
    },
    "review-release": {
      "stableId": "workspace-pr#review-release",
      "pageId": "workspace-pr",
      "pageTitle": "Contribution: isolated workspaces, meaningful tests, reviewed release",
      "pageSlug": "contribution/workspace-and-pr",
      "sectionId": "review-release",
      "sectionTitle": "Review and release remain separate decisions",
      "sectionProse": [
        "A PR is a request for review, not an automatic deployment. No automatic deployments, LINE sends, credential changes, or runtime installs are part of this contribution path. A separately approved release should be planned only after review and the appropriate operational checks.",
        "The contextual work panel can draft an “Implement and submit PR” request, but it cannot submit the PR or release anything. That boundary is intentional."
      ],
      "version": "2026.10.20.2",
      "date": "20 October 2026",
      "status": "Checked",
      "currentStatus": "Checked — release safeguards are explicit in the contribution contract.",
      "proposedStatus": "Seek explicit approval for any action that crosses from reviewed code into external or runtime effect.",
      "expectedOutcome": "A code change is not confused with a deployment, message, credential, or operational action.",
      "tests": [
        "Check preparing a draft performs no work, while submitting an implementation request permits source-only work and a PR.",
        "Check user text cannot remove the no-deploy, no-message, no-credential constraints from the generated prompt."
      ],
      "sourcePointers": [
        "README.md",
        "pyproject.toml",
        "dashboard/package.json",
        "tests/test_workspace_ui.cjs",
        "tests/test_browser_policy.cjs",
        "Handoff / pages/access.html",
        "Handoff / pages/infrastructure.html",
        "Handoff / START-HERE.html"
      ],
      "related": [
        {
          "id": "access",
          "title": "Personal access: choose the least-privileged path",
          "summary": "Most staff should use approved dashboard access. Technical operators use their own Tailscale identity and SSH key to reach the office mini only after owner approval.",
          "status": "Checked",
          "path": "/contribution/access/"
        },
        {
          "id": "sop-learning",
          "title": "SOP learning: turn observations into a better next step",
          "summary": "Learning connects incidents, reports, and repeated exceptions to a reviewed procedure. It prevents a useful lesson from being stranded in a one-off conversation.",
          "status": "Checked",
          "path": "/workflows/sop-learning/"
        },
        {
          "id": "services",
          "title": "Service directory: approved destinations, not shared access",
          "summary": "This directory names the approved service destinations used around Co.Property. Every destination requires an existing authorised account or approved auth; the wiki never stores tokens, credentials, or private logs.",
          "status": "Checked",
          "path": "/reference/service-directory/"
        }
      ],
      "sshTarget": {
        "alias": "coproperty-office",
        "hostname": "copropertys-mac-mini.tail3ab9e5.ts.net",
        "user": "coproperty",
        "projectPath": "/Users/coproperty/Projects/coproperty-office-os",
        "codexPath": "/Users/coproperty/.local/bin/codex",
        "hostFingerprint": "SHA256:UUFmlsdclEmRtyRWNqAdVYUoFxeUkRUGhbzObQPsOPg",
        "requiredChecks": [
          "Verify the hostname, project path, and repository status before any work.",
          "Create an isolated task worktree outside the installed project.",
          "Never modify the installed runtime from this contribution path."
        ]
      }
    }
  }
}
