Absorb the v1 cascade composer #23

Closed
opened 2026-07-23 00:04:14 +00:00 by coilyco-ops · 1 comment
Member

What to build

Pull all of v1's functionality (agentic-os generate_agent_compose.py) into the Go tool as agent-compose cascade, superseding the coexistence framing in docs/integration.md. V2 becomes the only composer; v1 retires after a compatibility window.

Acceptance criteria

  • agent-compose cascade reads the existing ~/.config/agent-compose/agent-compose.yaml unchanged: no config means total no-op; sources compose in listed order, then roots walked for AGENTS.COMPOSE.md sorted.
  • Scope filtering (machine scopes intersect source frontmatter scopes; absent machine scopes disables filtering) and harness filtering (frontmatter harnesses) behave exactly as v1.
  • Source rewrites match v1: frontmatter stripped, relative markdown links absolutized against the source directory, '## See also' sections dropped.
  • Per-harness sibling overrides (AGENTS..md) replace matching sections by verbatim heading and append new ones; overrides feed the divergence signature.
  • Divergence: one COMPOSED.md when every harness sees identical content, else COMPOSED..md; byte-identical slices share.
  • Load-point symlinks (claude/codex defaults plus config overrides) repoint safely; the mount-eligibility manifest is emitted deterministically with the v1 banner, default mount set, and per-harness repo unions so ward's read is uninterrupted.
  • --dry-run touches nothing; --check reproduces the drift verification with a unified diff.
  • Behavior cross-checked against the Python composer on shared fixtures; divergences are bugs unless recorded.
  • The roster artifact composes through the native cascade, closing the loop #19 wanted - and the dormant-host decision dissolves, since no Python revival is needed.
  • Docs: integration.md rewritten (v2 owns the cascade), cascade.md added, aos-side retirement steps (hook repointing, script removal) filed on agentic-os rather than done here.

Execution type

AFK against the v1 source and tests as the spec.

Filed by Claude Code on Kai's direction.

## What to build Pull all of v1's functionality (agentic-os generate_agent_compose.py) into the Go tool as `agent-compose cascade`, superseding the coexistence framing in docs/integration.md. V2 becomes the only composer; v1 retires after a compatibility window. ## Acceptance criteria - [ ] `agent-compose cascade` reads the existing ~/.config/agent-compose/agent-compose.yaml unchanged: no config means total no-op; sources compose in listed order, then roots walked for AGENTS.COMPOSE.md sorted. - [ ] Scope filtering (machine scopes intersect source frontmatter scopes; absent machine scopes disables filtering) and harness filtering (frontmatter harnesses) behave exactly as v1. - [ ] Source rewrites match v1: frontmatter stripped, relative markdown links absolutized against the source directory, '## See also' sections dropped. - [ ] Per-harness sibling overrides (AGENTS.<harness>.md) replace matching sections by verbatim heading and append new ones; overrides feed the divergence signature. - [ ] Divergence: one COMPOSED.md when every harness sees identical content, else COMPOSED.<harness>.md; byte-identical slices share. - [ ] Load-point symlinks (claude/codex defaults plus config overrides) repoint safely; the mount-eligibility manifest is emitted deterministically with the v1 banner, default mount set, and per-harness repo unions so ward's read is uninterrupted. - [ ] --dry-run touches nothing; --check reproduces the drift verification with a unified diff. - [ ] Behavior cross-checked against the Python composer on shared fixtures; divergences are bugs unless recorded. - [ ] The roster artifact composes through the native cascade, closing the loop #19 wanted - and the dormant-host decision dissolves, since no Python revival is needed. - [ ] Docs: integration.md rewritten (v2 owns the cascade), cascade.md added, aos-side retirement steps (hook repointing, script removal) filed on agentic-os rather than done here. ## Execution type AFK against the v1 source and tests as the spec. Filed by Claude Code on Kai's direction.
Author
Member

Shipped in 37e6df6, released as v0.2.0 (brew and scoop bumped).

  • agent-compose cascade reads the existing agent-compose.yaml unchanged: absent config no-ops; explicit sources compose in order, then roots walked sorted; duplicates collapse to first occurrence; missing sources degrade with a warning in run and fail in check, matching v1.
  • Scope filtering (absent key = off, untagged sources drop under active filtering, empty match refuses to write) and harness frontmatter filtering: tested.
  • Rewrites match v1: frontmatter stripped, See-also sections dropped, relative links absolutized with symlink resolution and fragment preservation.
  • Sibling AGENTS..md overrides replace by verbatim heading, append new sections, and fail loudly on ambiguous anchors; overrides feed the divergence signature; converging removes stale banner-carrying outputs and repoints symlinks (all tested).
  • Load-point symlinks: claude/codex defaults, config overrides, null opt-out, .bak backup of pre-existing regular files. Mount-eligibility manifest byte-matches v1 (defaults unioned per harness, deterministic JSON).
  • --dry-run previews only real changes and previews converged hosts as no-ops; --check reproduces drift verification with a bounded diff.
  • Cross-check: Go and Python composers ran on a shared fixture (scoped source in a projects repo, claude override, links, See-also, untagged root source); all outputs byte-identical after matching Python's symlink resolution in link absolutization. One knowing simplification: the drift diff is a bounded minus/plus rendering rather than difflib's full unified format.
  • The roster artifact now composes through the native cascade; #19's dormant-host decision is dissolved - no Python revival needed. Note recorded in docs/integration.md: this workstation's hand-edited COMPOSED snapshots must be reconciled into sources before the first native cascade run here.
  • Remaining aos-side retirement (drift-hook repointing, generator removal, fleet cutover) deliberately not done here; needs filing on agentic-os.

Closed by Claude Code working the issue queue.

Shipped in 37e6df6, released as v0.2.0 (brew and scoop bumped). - agent-compose cascade reads the existing agent-compose.yaml unchanged: absent config no-ops; explicit sources compose in order, then roots walked sorted; duplicates collapse to first occurrence; missing sources degrade with a warning in run and fail in check, matching v1. - Scope filtering (absent key = off, untagged sources drop under active filtering, empty match refuses to write) and harness frontmatter filtering: tested. - Rewrites match v1: frontmatter stripped, See-also sections dropped, relative links absolutized with symlink resolution and fragment preservation. - Sibling AGENTS.<harness>.md overrides replace by verbatim heading, append new sections, and fail loudly on ambiguous anchors; overrides feed the divergence signature; converging removes stale banner-carrying outputs and repoints symlinks (all tested). - Load-point symlinks: claude/codex defaults, config overrides, null opt-out, .bak backup of pre-existing regular files. Mount-eligibility manifest byte-matches v1 (defaults unioned per harness, deterministic JSON). - --dry-run previews only real changes and previews converged hosts as no-ops; --check reproduces drift verification with a bounded diff. - Cross-check: Go and Python composers ran on a shared fixture (scoped source in a projects repo, claude override, links, See-also, untagged root source); all outputs byte-identical after matching Python's symlink resolution in link absolutization. One knowing simplification: the drift diff is a bounded minus/plus rendering rather than difflib's full unified format. - The roster artifact now composes through the native cascade; #19's dormant-host decision is dissolved - no Python revival needed. Note recorded in docs/integration.md: this workstation's hand-edited COMPOSED snapshots must be reconciled into sources before the first native cascade run here. - Remaining aos-side retirement (drift-hook repointing, generator removal, fleet cutover) deliberately not done here; needs filing on agentic-os. Closed by Claude Code working the issue queue.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#23
No description provided.