add-task-metadata-key · git:20260711.db9d2ef · 2026-07-11 · sha256 b158fb0565a12e36
add-task-metadata-key git:20260711.db9d2efA
Immutable. This exact content is served forever at /api/v1/blob/b158fb0565a12e36.
--- name: add-task-metadata-key description: Use when adding a shared task-metadata key to the agent-teams runtime (like round/scope/verify). This is the highest-synchrony surface in the package — one key touches the const, a typed reader, the public export, two docs, and every host that reads it. Miss one and a host breaks silently. --- # Add a Task-Metadata Key (runtime) An ordered procedure. The hazard is that a metadata key is a cross-package contract spread across ~6 places with no compile-time link between them. FACTS live in the cited files. ## Steps 1. **Snapshot first.** `node harness/tools/describe-agent-teams.mjs` — and read `TASK_METADATA_KEYS` (`src/runtime/team-runtime.ts:102-108`, 5 keys today) plus the sibling `read*` accessors to match their shape. 2. **Add the key constant** next to the existing `TASK_*_METADATA_KEY` consts and register it in the `TASK_METADATA_KEYS` object. 3. **Add a typed reader** (`readTaskYourKey(task)`) mirroring `readTaskRound`/`readTaskScope` — hosts read metadata through these, not by reaching into the raw `metadata` bag. If the key controls dispatch (like `scope`/`round`), also wire it into `dispatchReadyTasks`'s gating. 4. **Export it** from `src/runtime/index.ts` — an accessor defined but not re-exported is invisible to hosts (the package already carries one such dead-but-defined symbol; don't add another). 5. **Update BOTH docs in the same change**: `docs/contracts.md` (the metadata contract) and `AGENTS.md`'s `TASK_METADATA_KEYS` line. The doc is the only registry hosts can discover the key from — an undocumented shared key is a silent host-visible surface (several already exist: `currentRound`, `proposedResult`, `completionSubmittedBy`, `revisionNote`, `teamPause` — do not add a sixth). 6. **Update the host reader(s).** `apps/canvas-workspace/src/main/agent-teams/service.ts` is the runtime host; it reads metadata keys directly. A key the host doesn't read does nothing user-visible. Confirm which host(s) need it. 7. **Verify.** `describe-agent-teams.mjs` clean; `pnpm --filter pulse-coder-agent-teams test`; if the key gates dispatch, add a `team-runtime.test.ts` case (that suite already tests scope/round gating — follow its pattern). ## Done when The const, the typed reader, the `runtime/index.ts` export, both docs, and every consuming host are updated together; dispatch gating is wired if the key controls readiness; describe-agent-teams clean; test green.