Files
gstack/ship/sections/manifest.json
T
Garry Tan 261d57a8e3 refactor(ship): carve into skeleton + on-demand sections (Claude) (T9)
ship/SKILL.md drops 167KB → 68.7KB (~59% of the always-loaded skill) by moving
8 prose-heavy steps into ship/sections/*.md, read on demand:
tests, test-coverage, plan-completion, review-army, greptile, adversarial,
changelog, pr-body. Step 12's version logic now calls the tested
gstack-version-bump CLI instead of inline bash.

Claude-first (S2): {{SECTION:id}} emits a STOP-Read pointer on Claude (skeleton +
generated section files) and INLINES the content on every other host, so external
hosts keep the full monolith — verified factory at 162KB with no sections dir.
{{SECTION_INDEX:ship}} renders the situation→section table from the PASSIVE
manifest (CM2 / v2_PLAN.md:663); required-reads live only in test fixtures.
Multi-pass resolve expands inlined sections' own resolvers.

Parity: ship invariant flipped to sectioned (union content checks + maxSkeletonBytes
asserts the shrink). Carve-fallout fixed across gen-skill-docs/skill-validation/
golden/plan-completion/#1539/size-budget tests via skeleton+sections union reads.
Free suite green except the pre-existing investigate parity drift.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 10:11:00 -07:00

57 lines
2.0 KiB
JSON

{
"$schema": "https://gstack.dev/schemas/section-manifest.json",
"skill": "ship",
"version": 1,
"note": "PASSIVE registry (v2 plan T9 / CM2). Fields are IDs, file paths, human titles, and human-readable trigger text ONLY. The skeleton's decision-tree prose is the ONLY place that decides WHEN to read a section; required-reads live in the E2E fixtures. No machine predicate here — see docs/designs/v2_PLAN.md:663.",
"sections": [
{
"id": "tests",
"file": "tests.md",
"title": "Test bootstrap, run, triage + eval suites",
"trigger": "running the test suites and (if prompt files changed) the eval suites (Steps 4-6)"
},
{
"id": "test-coverage",
"file": "test-coverage.md",
"title": "Test coverage audit (subagent)",
"trigger": "auditing test coverage of the diff (Step 7)"
},
{
"id": "plan-completion",
"file": "plan-completion.md",
"title": "Plan completion + verification audit (subagent)",
"trigger": "auditing plan completion, verification, and scope drift (Step 8)"
},
{
"id": "review-army",
"file": "review-army.md",
"title": "Pre-landing review + specialist army",
"trigger": "the pre-landing review and specialist dispatch (Step 9)"
},
{
"id": "greptile",
"file": "greptile.md",
"title": "Address Greptile review comments",
"trigger": "addressing Greptile review comments when a PR exists (Step 10)"
},
{
"id": "adversarial",
"file": "adversarial.md",
"title": "Adversarial review + learnings refresh",
"trigger": "the adversarial review and learnings capture (Step 11)"
},
{
"id": "changelog",
"file": "changelog.md",
"title": "CHANGELOG entry (release-summary + itemized)",
"trigger": "writing the CHANGELOG entry (Step 13)"
},
{
"id": "pr-body",
"file": "pr-body.md",
"title": "Documentation sync + PR/MR creation",
"trigger": "syncing docs and creating or updating the PR/MR (Steps 18-19)"
}
]
}