feat(agent-dev): PM standard — shared projects: project-init --canon, steward reads the charter wherever the epic points, §15 Visibility (ent#588) - #22
Conversation
Tested from Trinity (Workspace chat, agent in a real container)Local Trinity stack, agent
Screenshots of the Workspace thread are on file ( |
b46e568 to
9bc5ea0
Compare
6701326 to
8ee9404
Compare
… steward reads the charter wherever the epic points, §15 Visibility (ent#588) Operator ruling R21 (2026-09-10): one project-management standard at two visibility levels. A project in canon (agents/<owner>/projects/<slug>/) is managed exactly like one in project_files/<slug>/ — same charter, same registry epic, same steward, same intake, same decision ledger; placement decides only who can read the definition. The PM skills knew only project_files/ and derived it from the slug. PROJECT_STANDARD.template.md - §1 workspace row: two placements; the path is recorded in the epic and read from there. - §4 epic anatomy: the Workspace field's two forms (`project_files/<slug>/` | `canon:agents/<owner>/projects/<slug>/`). - §9: the quarantine pass never scans the canon (a canon-placed project is registered by its epic, never discovered from a folder). - new §15 Visibility: the R21 table, the charter envelope (the #585 contract) and the workspace resolver every project skill uses (`canon:` through the x-canon clone, pull --ff-only; other → repo-relative; missing → the epic body is the context; never the slug). project-init 1.1 → 1.2: `--canon` writes the charter + ledger into the agent's OWN canon folder (x-canon gate, own-folder only, lint, push via /canon-publish) and records the canon path in the epic; `adopt --canon <path>`; project.md carries the linted envelope at BOTH levels; `--dry-run` writes the workspace and prints the epic body without touching GitHub. project-steward 1.2 → 1.3: resolves the workspace from the epic body per §15, reads charter + ledger wherever they are, writes nothing into the canon, quarantine stays on project_files/. project-intake 1.2 → 1.3, project-task 1.3 → 1.4: no behaviour change; a passed-through workspace path resolves per §15, never from the slug. add-project-management 2.0 → 2.1; plugin 1.16.2 → 1.16.3; README. Stacked on ent#585 (the charter envelope + the project-envelope rule it lints against). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(ent#588 amendment 2026-09-22)
Follows the 2026-09-22 ruling (see ent#585's amendment): shared projects
live at projects/<slug>/ at the canon root, and everyone writes there
directly.
- project-init --canon scaffolds $CANON/projects/<slug>/ with this agent
as the charter owner (the steward). It records canon:projects/<slug>/
in the epic's Workspace field and lints with --scope projects/<slug>.
The collision check covers any steward, at either placement.
- adopt --canon <slug>:
- A root project is adopted only when it has no charter or its charter
owner is this agent. A project stewarded by someone else is refused.
- This agent's own project at the earlier agents/<self>/projects/ path
is moved to the root with git mv in the same publish.
- Another agent's project at the earlier path is refused.
- PROJECT_STANDARD §15: the canon workspace is the root zone, and a new
"who can write it" row says every agent and human on the canon (the
steward stays owner:). The resolver examples and the envelope comment
are updated, and the earlier placement is documented as a move.
- project-steward / -intake / -task: the resolver examples now use
canon:projects/<slug>/. The steward changelog becomes 1.4, since main
shipped a 1.3.
- agent-dev 1.16.7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…run its tasks in its own folder (ent#673) Operator ruling 2026-09-22: a project tracks its tasks in an external tracker or in a standardised file inside its own folder, in the agent or in the canon. Stacked on #22 (ent#588) / #21 (ent#585). - PROJECT_STANDARD 1.2: §16 Tracking modes. The charter's tracking: decides; omitted = external when epic: names a real epic, so every existing project is untouched; a registry of `none` = no GitHub. One file per task (tasks/T-NNN.md): front matter for what labels hold, the issue's four sections plus an append-only ## Log for what comments hold; log.md for the epic's thread; a shared finder for charters at both placements. Invariant 1 is one registry per project. - project-init 1.3 (--internal), project-task 1.5, project-intake 1.4, project-steward 1.4 (both modes in one sweep; writes and publishes its own canon internal projects), project-reconcile 1.2 ([<slug>/T-NNN] keys). - add-canon-lint 1.2: project-envelope learns tracking:, epic: only required when external, task files linted by front matter. - add-canon 1.8 (CONVENTIONS § Projects), canon-reconcile 1.5 (an internal charter is self-sourced), canon-consume 1.5. - add-project-management 2.2; agent-dev 1.17.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9bc5ea0 to
be4e2b3
Compare

Implements Abilityai/trinity-enterprise#588 — operator ruling R21 (2026-09-10): one project-management standard, two visibility levels. A project in canon (
agents/<owner>/projects/<slug>/) is managed exactly like one inproject_files/<slug>/— same charter, same registry epic, same steward, same intake, same decision ledger; placement decides only who can read the definition.Stacked on the ent#585 branch (base =
feat/ent585-canon-projects-zone, PR #21) — the charter envelope +project-enveloperule this lints against. Merge #21 first, then retarget this tomain(GitHub does it automatically when the base branch is deleted on merge).What changes
PROJECT_STANDARD.template.md`project_files/<slug>/`|`canon:agents/<owner>/projects/<slug>/`.## Workspacesection;canon:→ through the x-canon clone (pull --ff-only, never force); other → repo-relative; missing → the epic body is the context; never derived from the slug.project-init1.1 → 1.2 —--canonwritesproject.md+decisions.mdinto the agent's own canon folder (x-canon enrolment gate, own-folder only, lint, push via/canon-publish) and recordscanon:agents/<self>/projects/<slug>/in the epic;adopt --canon <path>; the charter carries the linted envelope at both levels;--dry-runwrites the workspace and prints the epic body without touching GitHub.project-steward1.2 → 1.3 — resolves the workspace per §15, reads charter + ledger wherever they are, writes nothing into the canon (charter stamps are/canon-reconcile's; a charter/epic status disagreement goes in the digest), quarantine stays onproject_files/.project-intake1.2 → 1.3,project-task1.3 → 1.4 — no behaviour change; a passed-through workspace path resolves per §15.add-project-management2.0 → 2.1; plugin1.16.2 → 1.16.3; README.Verification
/project-init Demo Shared --canon --dry-run, headless Claude Code 2.1.274 in a sandbox agent (x-canon:→ a local clone of the ent#585-patched canon,agents/testbot/): wrotecanon/agents/testbot/projects/demo-shared/{project.md,decisions.md}with the envelope, printed the epic body with## Workspace=`canon:agents/testbot/projects/demo-shared/`, created nothing on GitHub, ran the linter and reported honestly.canon_lint.py --scope agents/testbot/projects/demo-shared→ PASS 0/0 (this surfaced that a dry-run'sepic: …#0failed ent#585'sEPIC_RE; fixed on feat(agent-dev): canon projects/ zone — charter envelope, project-envelope lint rule, consume projects mode, reconcile staleness (ent#585) #19 —#0= not yet registered, reconcile flags it).`canon/agents/corbin/projects/tandem/`in backticks — resolves to the canon clone and reads Tandem's charter (tldr) + ledger (30 ruling rows) with no localproject_files/copy; thecanon:form, a repo-relative form, a pre-§15 body (no field → epic is context) and an invisible path (→ no workspace, noted) each behave as §15 states. A live steward run was deliberately not made against the real registry (it posts comments/labels).grep -c '{{'→ 0); audit-wizards gates 1–6 clean on the touched files (the pre-existingCONVENTIONS-word false positive aside); frontmatter version/changelog/banner on all five skills.Not done here
fleet/project-standard.md, the local.claude/skills/project-*re-install and thetrinity-skillslibrary refresh (/sync-skill-library→/promote-skill refresh) are trinity-pm's steps after merge.canon:form is optional.add-orchestrator/templates/project-init.md(the orchestrator bundle's own variant readingfleet/project-standard.md) is out of this ticket's scope — flagged for a follow-up so the twoproject-inits don't drift.🤖 Generated with Claude Code