Use after scope-need and relevant specialist skills approve work. Takes the scoped-need document and produces a flat, ordered list of discrete changes required. Each change is scoped to be a single commit.
A scoped need describes what is being delivered. An enumerated change list describes what must move in the repo. This skill is the transformation.
body's change lists are typically smaller than lesser's because the service has a tighter surface: one Lambda, one optional table, CDK stack with SSM exports, and 13 docs files. A narrow bug fix might be two to three commits; a tool addition with contract regeneration might be five to eight; an MCP-contract-evolving change with client-coordination might be more. The single-commit rule holds regardless of total count.
An approved scoped-need document from scope-need. If the scope touches tool surface, MCP contract, lesser integration, host delegation, deploy, or framework consumption, the relevant specialist skill's findings also apply. Load prior context with memory_recent.
Walk the scoped need against every surface of body:
cmd/lesser-body/main.go — Lambda entrypoint. App lifecycle, Lift / AppTheory bootstrap, signal handling.internal/auth/internal/mcpserver/ — MCP tool / resource / prompt registration. 22 files. registerTools() is the load-bearing function.internal/mcpapp/ — AppTheory app lifecycle, runtime policy integration, audit emission. 33 files.internal/lesserapi/ — HTTP client calling lesser's REST API.internal/memory/ — DynamoDB-backed memory event store (memory tools).internal/soulbinding/ — soul binding lookup; determines runtime profile (drone vs souled).internal/trustconfig/ — managed-instance trust config and override precedence.internal/soulapi/ — HTTP client to lesser-soul / lesser-host for identity resolution.internal/runtimepolicy/ — runtime profile enforcement (drone vs souled tool filtering).internal/lambdaentry/ — Lambda entry handler and MCP session management.cdk/ — CDK TypeScript stacks (and any Go pinning). stacks/main.go or equivalent defines the Lambda, session table, SSM exports.docs/ — 13 operator / developer guides. Updates ride with behavior / contract changes.scripts/build.sh — build artifact script.go.mod / go.sum — dependency changes.app-theory/app.json (if present) — AppTheory deployment contract.AGENTS.md (if present) — repository guidelines. Rarely touched; governance-level.README.md — top-level overview. Rides with integration or tool-surface changes.A change that touches none of these isn't really a change.
internal/mcpserver/ land together as the registration of a given tool — registration happens at startup and a half-registered tool in a commit is a broken commit.docs/mcp.md, OAuth changes update docs/oauth-migration.md, deploy changes update docs/deployment.md, security changes update docs/security.md.coordinate-framework-feedback.Every enumerated item must answer: is this body-mission work, or is it scope growth outside?
If any item is scope growth, stop and revisit scope-need.
Every enumerated item must also answer: does this touch scope or profile gates?
evolve-tool-surface findings referenced.Every enumerated item must also answer: does this touch the MCP contract (discovery, OAuth metadata, JSON-RPC shape)?
preserve-mcp-contract walk must be complete; enumeration references coordination plan.Every enumerated item must also answer: does this touch lesser integration (JWT, DynamoDB, REST API, SSM exports)?
coordinate-with-lesser findings.lesser steward required before enumeration finalizes.Every enumerated item must also answer: does this consume AppTheory (especially MCP runtime) / TableTheory idiomatically?
coordinate-framework-feedback. The change may belong in the framework.Each enumerated item fits in one commit:
go build ./... succeedsgo test ./... passesgo vet ./... passesgofmt -l . / goimports leave the tree cleancdk synth -c app=<slug> -c stage=<stage> -c baseDomain=<domain> succeedsscripts/build.sh produces a valid dist/lesser-body.zip### N. <imperative title>
- **Paths**: <files or directories touched>
- **Surface**: <cmd/lesser-body / internal/auth / internal/mcpserver / internal/mcpapp / internal/lesserapi / internal/memory / internal/soulbinding / internal/trustconfig / internal/soulapi / internal/runtimepolicy / internal/lambdaentry / cdk / docs / deps>
- **Classification**: <security / scope-profile / MCP-contract / tool-surface / lesser-integration / host-delegation / operational-reliability / AGPL / framework-feedback / bug-fix / test-coverage / dependency-maintenance / docs>
- **Scope / profile impact**: <none / preserves / tightens — refuse if loosens>
- **MCP contract impact**: <none / additive / breaking — coordination referenced>
- **Lesser integration impact**: <none / preserves / changes — coordination referenced>
- **Framework consumption**: <idiomatic / reported via coordinate-framework-feedback>
- **Acceptance**: <one sentence: what makes this commit done>
- **Validation**: <`go test ./...`, `go vet ./...`, `gofmt -l .`, `scripts/build.sh`, `cdk synth` for representative context>
- **Conventional Commit subject**: `<type(scope): subject>`
docs/mcp.md.well-known/mcp.json shape correctlycoordinate-framework-feedbackAppend only if enumeration surfaces something unusual — a tool-registration interaction subtlety, a scope / profile edge case, a lesser-integration coordination subtlety, a CDK / SSM wiring gotcha, a framework-awkwardness pattern. Routine enumerations aren't memory material. Five meaningful entries beat fifty log-shaped ones.
Invoke plan-roadmap to sequence the flat list into phases and identify the per-stage rollout plan.