{
"schema_version": 2,
"package_id": "trusty-mpm.pm.bundled-fallback",
"description": "The DEFAULT PM instruction package (#4318). This file — not a Rust literal — is the authored manifest: the section taxonomy with its customization tiers, the ordered block stream, every join, and the declared composition-time generators. Bulk prose lives in `sections/*.md` and is referenced by `file` bodies; a rule authored here rather than in a section file uses a `text` body. Composition is byte-deterministic for a given manifest and roster (see `instruction_package::InstructionPackage::compose`). Deliberately carries NO `$schema` key: every object in the format sets `additionalProperties: false` / `deny_unknown_fields`, so an unrecognised key is a hard parse error rather than dropped instruction content. Validate against `instruction-package.schema.json` out of band.",
"trailing_newline": false,
"sections": [
{
"id": "identity",
"title": "Identity",
"customization_tier": "project",
"description": "Who the PM is. Framework floor."
},
{
"id": "core",
"title": "Core PM Instructions",
"customization_tier": "fixed",
"description": "Core operating instructions, including response format and prose rules."
},
{
"id": "memory",
"title": "Memory Protocol",
"customization_tier": "project"
},
{
"id": "search",
"title": "Code Search Protocol",
"customization_tier": "project"
},
{
"id": "workflow",
"title": "Workflow",
"customization_tier": "project",
"description": "The phase workflow, including the sprint-then-harden doctrine."
},
{
"id": "agent-delegation",
"title": "Agent Delegation",
"customization_tier": "project",
"description": "Routing doctrine; the live roster is appended by the `agent-roster` generator."
},
{
"id": "enforcement",
"title": "Delegation Enforcement",
"customization_tier": "project",
"description": "The canonical Prohibitions and Circuit Breakers tables — the PM's entire delegation-enforcement authority. Framework floor. Was tier `project` inside `core` until #4573, where a three-line `CLAUDE.md` CORE override deleted both tables outright and left the floor asserting a table that was no longer in the prompt."
},
{
"id": "non-overridable-rules",
"title": "Non-Overridable Rules",
"customization_tier": "project",
"description": "Non-overridable rules, the customization contract, and the Trusty tool-priority mandate. Framework floor."
},
{
"id": "framework-guaranteed-conventions",
"title": "Framework-Guaranteed Conventions",
"customization_tier": "project",
"description": "Attribution footer, documentation proportionality, ticket attribution. Framework floor."
}
],
"blocks": [
{
"section": "core",
"join_before": "rule",
"body": {
"kind": "file",
"path": "sections/core.md"
}
},
{
"section": "core",
"join_before": "blank",
"body": {
"kind": "text",
"text": "### Clickable References\n\nEvery reference to an issue, PR, ticket, or commit renders as a clickable markdown link — never a bare number — in every artifact you author, not only formal reports. \"Fixed in #4318\" with no link is a defect.\n\n- Issues and PRs: `[#4318](https://github.com/<owner>/<repo>/issues/4318)`. GitHub resolves the `/issues/` form to a PR, so one shape covers both.\n- Commits: `[d027ef1](https://github.com/<owner>/<repo>/commit/d027ef1)`. A bare short SHA is acceptable only inside a table of many.\n- Tickets in another tracker: link to that tracker's issue URL."
}
},
{
"section": "memory",
"join_before": "blank",
"body": {
"kind": "file",
"path": "sections/memory.md"
}
},
{
"section": "search",
"join_before": "blank",
"body": {
"kind": "file",
"path": "sections/search.md"
}
},
{
"section": "core",
"join_before": "rule",
"body": {
"kind": "generated",
"generator": "stack-profile"
},
"optional": true
},
{
"section": "workflow",
"join_before": "rule",
"body": {
"kind": "file",
"path": "sections/workflow.md"
}
},
{
"section": "workflow",
"join_before": "blank",
"body": {
"kind": "text",
"text": "## Opportunistic Fixes\n\nAn easy fix discovered while working on a file is noted on the CURRENT issue and made in the same work. Never file a new issue for it.\n\nNew issues are reserved for genuinely separable work someone would schedule on its own. Companion to the existing review-finding rule: fix it in the surfacing PR or drop it."
}
},
{
"section": "agent-delegation",
"join_before": "rule",
"body": {
"kind": "file",
"path": "sections/agent-delegation.md"
}
},
{
"section": "agent-delegation",
"join_before": "blank",
"body": {
"kind": "text",
"text": "> The live roster below is authoritative for WHICH agents exist and what each handles; the tables above are routing doctrine only. Where the two disagree, trust the roster.\n>\n> Depending on how this session was launched, a listed agent may not be loadable. If a dispatch fails with an unknown agent type, re-route to the closest listed alternative — do not retry the same agent."
}
},
{
"section": "agent-delegation",
"join_before": "blank",
"body": {
"kind": "generated",
"generator": "agent-roster"
}
},
{
"section": "core",
"join_before": "rule",
"body": {
"kind": "generated",
"generator": "project-addendum"
},
"optional": true
},
{
"section": "identity",
"join_before": "rule",
"body": {
"kind": "file",
"path": "sections/identity.md"
}
},
{
"section": "enforcement",
"join_before": "blank",
"body": {
"kind": "file",
"path": "sections/enforcement.md"
}
},
{
"section": "non-overridable-rules",
"join_before": "blank",
"body": {
"kind": "file",
"path": "sections/non-overridable-rules.md"
}
},
{
"section": "framework-guaranteed-conventions",
"join_before": "blank",
"body": {
"kind": "file",
"path": "sections/framework-guaranteed-conventions.md"
}
}
]
}