This target repository follows wellmanifest/new-project policy-as-code.
Before any multi-step implementation, an agent must:
- Read
.governance/manifest.json,TODO.md,project/TICKETS.mdand the active ticket. - Reuse an unfinished ticket whose workstream and scope match. A second active
ticket is allowed only in a distinct workstream with no write-scope overlap.
Otherwise run
./project/new-ticket.sh --title "..." --agent "..." --workstream "...". - Complete the ticket
README.md, ownedai-*.md,intent.jsonandTODO.md. - Stop in
WAIT_FOR_APPROVAL; do not change implementation files yet. - After explicit approval, move to
EDITand stay insideintent.jsonallowedPaths. - Never create or edit
project/ticket-*/user-*.md; only its human owner or a trusted intake boundary may do so. - Keep executable source/tests/scripts outside ticket directories.
- Run
./project/governance-check.shplus the stack and Docker checks before reporting completion. - Serialize ticket-ID allocation before branching, then use a separate
branch/worktree per implementation ticket. Each diff must resolve to exactly
one active ticket. Shared contract paths are edited only by the declared
integration workstream;
integrationTicketcoordinates work but does not transfer path ownership. - Only
IN_PROGRESSreserves a workstream and write scope.BACKLOG,PLANandBLOCKEDretain evidence without blocking another implementation; transition back toIN_PROGRESSbefore changing source or tests. - Treat GitHub review as trusted only when it targets the current HEAD and
either a
Userlogin is in protectedtrusted-reviewersor aBotlogin is in the separate protectedtrusted-validator-appsinput. Never trust an arbitrary Bot review. - Require merge approval evidence to bind repository, PR, current HEAD, active ticket and actor. The protected resolver creates that evidence outside the PR checkout; repository-authored evidence is untrusted.
- A signed attestation is trusted only after a protected verifier validates its signature, issuer, predicate type and subject bindings.
- Validator-agent examples use
LLM_MODEL_VALIDATOR=openrouter/z-ai/glm-5.2; model findings stay advisory. - Configure GitHub with
delete_branch_on_merge=true. A merged ticket branch must disappear after merge. A PR closed without merge keeps its branch until the owner explicitly discards that unmerged work. When no PR is open, the only remote branch is the default branch.
Markdown approval is an audit note, not trusted merge authorization. Required merge approval comes from the repository's protected review, attestation and ruleset boundary.