Skip to content

docs: extracting-plan-dag skill + gc/non-gc orchestration strategy#108

Open
scarson wants to merge 9 commits intodevfrom
claude/create-dag-remediation-plan-qTzin
Open

docs: extracting-plan-dag skill + gc/non-gc orchestration strategy#108
scarson wants to merge 9 commits intodevfrom
claude/create-dag-remediation-plan-qTzin

Conversation

@scarson
Copy link
Copy Markdown
Owner

@scarson scarson commented May 10, 2026

Summary

Codifies the DAG-extraction methodology that emerged across the prior conversation about coordinating multi-agent plan execution. Three artifacts:

  1. .claude/skills/extracting-plan-dag/SKILL.md — production-quality skill that chains after plan-review-cycle when the execution model warrants it. Detects gc / non-gc projects and adjusts mandatoriness of the gate (Phase 1) and tracker sync (Phase 8) accordingly. Bridges the phase-granularity Living Document Contract banners to task-granularity DAG nodes.

  2. dev/research-findings/dag-extraction-and-orchestration.md — strategy + context doc explaining how the Living Document Contract, DAG extraction, and Beads-backed trackers (Gas City) layer; who has authority for what; and how the workflow stays the same on gc and non-gc projects with a small mechanical delta (skip the in-progress banner; force DAG extraction + tracker sync).

  3. dev/plans/2026-03-10-phase9-health-review-remediation-dag.md — retrofit of the existing phase 9 DAG with header pointers to the methodology and an Adversarial Review section documenting the nine rounds the DAG actually went through during its initial production.

Strategy in one paragraph

Three tools, three layers, one direction of authority: plan → DAG → tracker. Banners stay; Beads adds atomic claim and queryable runtime state when the project's execution model warrants it. The gc / non-gc split is small and mechanical: detect once, drop the 🚧 banner row, force DAG extraction and Phase 8 sync. Everything else is the same workflow on both kinds of project.

Adversarial review of the new skill

Four rounds run against extracting-plan-dag per its own Phase 7 process. Findings applied between rounds; final loop pass produced zero material findings.

Round Lens Notable findings applied
1 Naive fresh agent Vocabulary normalized between Phase 1 gate and Phase 8 table; idempotency-verification clarified; rebuttal for "Beads is overkill" softened to match table semantics
2 Coverage auditor Granularity bridge added (banners are phase-level, DAG nodes are task-level — parent_phase + parent_phase_banner capture both); plan-revision-after-review now requires fresh plan-review-cycle pass; banner-state internal-inconsistency row added to Phase 9
3 Inference-discipline auditor Strong claims softened (e.g. "single most common failure mode" → "a common failure mode"); 3-round canonical structure justified by mapping each round to a specific failure mode
4 Tool-coupling auditor (skill-specific) Format pluralism added (Mermaid default; DOT and structured-text valid); Beads-specific examples in social proof flagged as exemplary not canonical

Test plan

  • Skill renders correctly in the skill list (description visible, frontmatter parses)
  • Strategy doc renders cleanly on GitHub (Mermaid/tables format correctly)
  • DAG doc retrofit reads clearly and the new Adversarial review section is accurate to the conversation arc
  • Cross-references between the three artifacts resolve to real paths
  • No accidental commits to main; PR base is dev per worktree-flow convention

Open questions for review

  1. writing-plans-enhanced integration. The new skill chains after plan-review-cycle but writing-plans-enhanced doesn't yet call it. A future change to writing-plans-enhanced adding a Step 6 ("Run extracting-plan-dag if Phase 1 gate triggers") would make this automatic. Out of scope for this PR; flagged for follow-up.

  2. gc-mode wrapper vs. inline conditional. The skill handles gc / non-gc inline rather than via a writing-plans-gc wrapper. Strategy doc tracks this as a maintenance concern: if the gc-specific delta grows past ~5 items across multiple skills, a single skill with a mode: gc parameter would be cleaner than a wrapper fork.

  3. Beads detection markers. The skill lists plausible markers (.gc/, .beads/, gas-city config, CLAUDE.md setting) but doesn't pick a canonical one. Worth nailing down before the first gc-project plan extraction.

https://claude.ai/code/session_01BWBzqwVmxrSJmpgoSgkx6J


Generated by Claude Code

scarson and others added 9 commits April 8, 2026 05:33
…tes (#84)

* chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 (#71)

Bumps [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) from 4.1.3 to 4.1.4.
- [Release notes](https://github.com/go-jose/go-jose/releases)
- [Commits](go-jose/go-jose@v4.1.3...v4.1.4)

---
updated-dependencies:
- dependency-name: github.com/go-jose/go-jose/v4
  dependency-version: 4.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sam Carson <samuel.carson@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump defu from 6.1.4 to 6.1.6 in /web (#72)

Bumps [defu](https://github.com/unjs/defu) from 6.1.4 to 6.1.6.
- [Release notes](https://github.com/unjs/defu/releases)
- [Changelog](https://github.com/unjs/defu/blob/main/CHANGELOG.md)
- [Commits](unjs/defu@v6.1.4...v6.1.6)

---
updated-dependencies:
- dependency-name: defu
  dependency-version: 6.1.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sam Carson <samuel.carson@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump picomatch in /web (#66)

Bumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.

Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/picomatch@4.0.3...4.0.4)

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/picomatch@4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sam Carson <samuel.carson@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump github.com/danielgtaylor/huma/v2 from 2.37.2 to 2.37.3 (#69)

Bumps [github.com/danielgtaylor/huma/v2](https://github.com/danielgtaylor/huma) from 2.37.2 to 2.37.3.
- [Release notes](https://github.com/danielgtaylor/huma/releases)
- [Commits](danielgtaylor/huma@v2.37.2...v2.37.3)

---
updated-dependencies:
- dependency-name: github.com/danielgtaylor/huma/v2
  dependency-version: 2.37.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump google.golang.org/genai from 1.50.0 to 1.52.0 (#70)

Bumps [google.golang.org/genai](https://github.com/googleapis/go-genai) from 1.50.0 to 1.52.0.
- [Release notes](https://github.com/googleapis/go-genai/releases)
- [Changelog](https://github.com/googleapis/go-genai/blob/v1.52.0/CHANGELOG.md)
- [Commits](googleapis/go-genai@v1.50.0...v1.52.0)

---
updated-dependencies:
- dependency-name: google.golang.org/genai
  dependency-version: 1.52.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump github.com/lib/pq from 1.11.2 to 1.12.0 (#60)

Bumps [github.com/lib/pq](https://github.com/lib/pq) from 1.11.2 to 1.12.0.
- [Release notes](https://github.com/lib/pq/releases)
- [Changelog](https://github.com/lib/pq/blob/master/CHANGELOG.md)
- [Commits](lib/pq@v1.11.2...v1.12.0)

---
updated-dependencies:
- dependency-name: github.com/lib/pq
  dependency-version: 1.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump actions/setup-go from 6.3.0 to 6.4.0 (#68)

Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](actions/setup-go@4b73464...4a36011)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump @tailwindcss/vite from 4.2.1 to 4.2.2 in /web (#65)

Bumps [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.2/packages/@tailwindcss-vite)

---
updated-dependencies:
- dependency-name: "@tailwindcss/vite"
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump yaml from 2.8.2 to 2.8.3 in /web (#67)

Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](eemeli/yaml@v2.8.2...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sam Carson <samuel.carson@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump vue-router from 5.0.3 to 5.0.4 in /web (#63)

Bumps [vue-router](https://github.com/vuejs/router) from 5.0.3 to 5.0.4.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](vuejs/router@v5.0.3...v5.0.4)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-version: 5.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump eslint from 10.0.3 to 10.1.0 in /web (#64)

Bumps [eslint](https://github.com/eslint/eslint) from 10.0.3 to 10.1.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.0.3...v10.1.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump @vitest/eslint-plugin in /web (#62)

Bumps [@vitest/eslint-plugin](https://github.com/vitest-dev/eslint-plugin-vitest) from 1.6.12 to 1.6.13.
- [Release notes](https://github.com/vitest-dev/eslint-plugin-vitest/releases)
- [Commits](vitest-dev/eslint-plugin-vitest@v1.6.12...v1.6.13)

---
updated-dependencies:
- dependency-name: "@vitest/eslint-plugin"
  dependency-version: 1.6.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump github.com/jackc/pgx/v5 from 5.8.0 to 5.9.1 (#59)

Bumps [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) from 5.8.0 to 5.9.1.
- [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md)
- [Commits](jackc/pgx@v5.8.0...v5.9.1)

---
updated-dependencies:
- dependency-name: github.com/jackc/pgx/v5
  dependency-version: 5.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump vite from 7.3.1 to 8.0.1 in /web (#61)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 8.0.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.0.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): remove vite-plugin-vue-devtools (no Vite 8 support)

The plugin's transitive dep vite-plugin-inspect doesn't support Vite 8
yet (vuejs/devtools#1071). It was installed but never registered in
vite.config.ts. The Vue DevTools browser extension provides equivalent
functionality. Re-add when upstream updates the peer dep range.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(crypto): bind GCM ciphertext to entity context via AAD (#83)

Add Additional Authenticated Data (AAD) to AES-256-GCM encrypt/decrypt,
preventing ciphertext relocation between database rows. SSO client
secrets are bound to org_id, MFA TOTP secrets to user_id, and the
doctor encryption sentinel to a fixed label.

Also adds dev/specs/sso-secret-storage.md documenting the full
encryption architecture for external sharing.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(deps): bump reka-ui from 2.9.2 to 2.9.3 in /web (#80)

Bumps [reka-ui](https://github.com/unovue/reka-ui) from 2.9.2 to 2.9.3.
- [Release notes](https://github.com/unovue/reka-ui/releases)
- [Commits](unovue/reka-ui@v2.9.2...v2.9.3)

---
updated-dependencies:
- dependency-name: reka-ui
  dependency-version: 2.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump vue from 3.5.30 to 3.5.32 in /web (#79)

Bumps [vue](https://github.com/vuejs/core) from 3.5.30 to 3.5.32.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](vuejs/core@v3.5.30...v3.5.32)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.32
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump github.com/lib/pq from 1.12.0 to 1.12.3 (#76)

Bumps [github.com/lib/pq](https://github.com/lib/pq) from 1.12.0 to 1.12.3.
- [Release notes](https://github.com/lib/pq/releases)
- [Changelog](https://github.com/lib/pq/blob/master/CHANGELOG.md)
- [Commits](lib/pq@v1.12.0...v1.12.3)

---
updated-dependencies:
- dependency-name: github.com/lib/pq
  dependency-version: 1.12.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump google.golang.org/genai from 1.52.0 to 1.52.1 (#75)

Bumps [google.golang.org/genai](https://github.com/googleapis/go-genai) from 1.52.0 to 1.52.1.
- [Release notes](https://github.com/googleapis/go-genai/releases)
- [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md)
- [Commits](googleapis/go-genai@v1.52.0...v1.52.1)

---
updated-dependencies:
- dependency-name: google.golang.org/genai
  dependency-version: 1.52.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump oxlint and eslint-plugin-oxlint to ~1.58.0

eslint-plugin-oxlint 1.58.0 adds a peerDependency on oxlint ~1.58.0,
so both must be bumped together. Lint and tests verified.

Closes #78.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(deps-dev): bump @types/node from 24.12.0 to 25.5.2 in /web (#77)

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.12.0 to 25.5.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.5.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): upgrade TypeScript 5.9 to 6.0

- Bump typescript from ~5.9.3 to ~6.0.2
- Bump @vue/tsconfig from ^0.9.0 to ^0.9.1 (adds TS6 peer support)
- Remove deprecated baseUrl from tsconfig.json and tsconfig.app.json
  (TS6 resolves paths relative to the tsconfig file by default)

Type-check, lint, and all 419 unit tests pass.

Closes #81.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* revert(deps): revert TypeScript 6 upgrade, keep baseUrl removal

openapi-typescript@7.13.0 requires peer typescript ^5.x with no TS6
support yet. Revert typescript and @vue/tsconfig version bumps.

Keep the baseUrl removal from tsconfig.json and tsconfig.app.json —
paths resolve relative to the tsconfig file without it on TS 5.9 too,
and this prepares for TS6 when the ecosystem catches up.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(lint): disable require-mock-type-parameters rule

New in oxlint 1.58.0 under the correctness category. Requires type
parameters on all vi.fn() calls — a style preference, not a
correctness issue. Disable rather than modifying 147 test call sites.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Revert "chore(lint): disable require-mock-type-parameters rule"

This reverts commit 1763dbb.

* fix(lint): add type parameters to all vi.fn() mock calls

oxlint 1.58.0 enables require-mock-type-parameters under correctness.
Untyped vi.fn() returns Mock<(...args: any[]) => any>, silently
discarding type safety on mock arguments and return values.

Add explicit type parameters to all 147 vi.fn() call sites across
28 test files. All tests pass (419/419).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(lint): use precise mock types where generic unknown breaks type-check

Three files needed more specific type parameters than the generic
(...args: unknown[]) => unknown pattern:

- CreateWatchlistDialog: cast mock.calls access for body property access
- client.test.ts: type fetchMock as typeof fetch (assigned to globalThis.fetch)
- CveDetailView: type mockGET first arg as string (used in mockImplementation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(lint): match proxy signature to typed mockGET in CveDetailView test

The spread proxy (...args: unknown[]) can't spread into a
(string, ...unknown[]) parameter. Match the proxy's signature.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sync dev → main: README refresh, Phase 7 SCIM, Phase 10 fixtures, Phase 11 MFA hardening
chore(deps): pgx security bump + skills + .serena gitignore
Captures the dependency structure of the 2026-03-10 phase 9 health
review remediation plan: prerequisites, intra-stage ordering (1.11
after all other Stage 1, 2A.2 after 2A.1, 2B.1 after 1.11, 2C wiring
after 2B refactors, 3.x after the OpenAPI gate and 3.0 reference, 6C
after Stage 3), the topological layers a coordinator can fan out, and
the critical path.
Removes superseded Stage 3 tasks 3.0-3.12 and replaces them with a
single external-plan node pointing at the 2026-03-15 stage 3
convergence plan. Removes the fabricated 2C.1->2C.2 edge so the two
runtime-wiring tasks are siblings under 2B. Drops T6D from the graph
to match the resolved/invalidated text. Demotes the 1.11->2B.1 edge
from a dedicated arrow to a soft-conflict note. Splits the Phase 8
prerequisite into 8B/8C/8D/8E with per-task dotted edges. Adds a
soft-conflicts table for file-level overlaps in L1. Recomputes the
critical path as two independent chains, with chain B's depth set by
the external Stage 3 plan.
Adds a scope note that intra-task ordering (e.g. 6B's TDD sequence)
is not modeled here. Closes the last open item from the adversarial
review.
Production-quality methodology skill for extracting a plan's
inter-task dependency structure into a queryable, derived artifact.
Chains after plan-review-cycle when the execution model warrants it.

Adopts the conventions of writing-plans-enhanced + plan-review-cycle
+ handoff: RFC 2119 terminology, runner-MUST/SHOULD prescriptive
voice, core discipline, multi-round adversarial review, red flags,
common rationalizations, checklist, social proof, related conventions,
the bottom line.

Distinguishes gc projects (Gas City / Beads-backed orchestrator
load-bearing) from non-gc projects and adjusts mandatoriness of the
gate (Phase 1) and tracker sync (Phase 8) accordingly. Bridges the
phase-granularity Living Document Contract banners to the
task-granularity DAG nodes via parent_phase metadata. Defines a
plan-revision protocol mapped to LDC events (claim, ship, defer,
deviation, discovery, stale-claim reclaim, banner inconsistency).

Authority flows plan -> DAG -> tracker; never the other way.
The phase 9 DAG was produced before the methodology was codified.
Adds a header pointer to the new extracting-plan-dag skill and the
dag-extraction-and-orchestration strategy doc, and an Adversarial
review section that documents the nine rounds the DAG actually went
through during its initial production (recovered from the
conversation arc).

Round 4's plan-specific perspective is documented as
"<details>-block / supersession audit" — chosen because the plan
revised Stage 3 mid-flight and wrapped the original task list in a
"Do not execute" details block; the audit caught 13 superseded tasks
that had been promoted as live nodes.
…plit

Records the strategy converged on across the discussion that produced
extracting-plan-dag: how the Living Document Contract, DAG extraction,
and Beads-backed trackers (Gas City) layer; who has authority for
what; and how the workflow stays the same on gc and non-gc projects
with a small mechanical delta.

Key claims:
- Three tools, three layers, one direction of authority: plan -> DAG
  -> tracker. Tracker edits never propagate back.
- The Living Document Contract stays even when Beads exists. Beads
  is a runtime tool; LDC banners are an archival record. They record
  different things.
- The gc-specific reduction is small and concrete: skip the in-progress
  (claim) banner update because Beads has the claim atomically; force
  DAG extraction and Phase 8 sync. Everything else is the same workflow.
- The DAG stays even when banners are sufficient — for solo or
  sequential plans Phase 1 of the skill skips it; for parallel
  agents or gc projects it runs unconditionally.

Inspired in structure by the handoff skill: methodology focused,
prescriptive voice, asymmetries called out, common failure modes
mapped to preventive substrates.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants