Skip to content

feat(skills): add /burndown — bounded epic-completion loop (ag-3yl8 #burndown-skill)#600

Merged
boshu2 merged 4 commits into
mainfrom
feat/ag-3yl8-burndown-skill
May 30, 2026
Merged

feat(skills): add /burndown — bounded epic-completion loop (ag-3yl8 #burndown-skill)#600
boshu2 merged 4 commits into
mainfrom
feat/ag-3yl8-burndown-skill

Conversation

@boshu2
Copy link
Copy Markdown
Owner

@boshu2 boshu2 commented May 29, 2026

What

Adds /burndown — the bounded, finite-end counterpart to open-ended /evolve. Drives a finite target (epic / set of epics / explicit bead list) to every in-scope bead merged on main via bounded /rpi cycles, then STOPS.

Why (the gap it fills)

Command Shape
/evolve open-ended compounding loop — goes dormant, never completes
/crank parallel-wave one-shot fan-out
/autodev contract layer only (not a loop)
/burndown serial, resumable, finite-end drive-to-merge loop

Per-cycle (idempotent — cron / ScheduleWakeup / in-session)

reconcile one outstanding tick-PR (CI-green→merge, pending→skip, red→fix) → completion-check (all in-scope merged → DONE/STOP) → pick ONE in-scope ready bead → drive in a worktree → PR with trailers → loop. Finite stops: target merged · --max-cycles=N · operator STOP/--hold-merges · genuine blocker.

This is the generalized, named form of the cron loop we validated landing PR #599.

Dual-runtime + gates

  • skills/burndown/SKILL.md (canonical) + skills-codex/burndown/SKILL.md (Codex-native).
  • audit-codex-parity.sh --skill burndown PASS; heal.sh --strict PASS.
  • Skill counts synced 76→77 (SKILL-TIERS, PRODUCT, docs/SKILLS, docs/ARCHITECTURE, using-agentops catalog); context-map.md regenerated; embedded skills synced; go build ./... success.

Closes-scenario: ag-3yl8#burndown-skill
Bounded-context: BC5-Runtime
Evidence: skills/burndown/SKILL.md

boshu2 added a commit that referenced this pull request May 29, 2026
…2y item 1) (#609)

## What

First slice of **`ag-cw2y`** (make adding a skill one-shot-green).
Adding `/burndown` (ag-3yl8 #600) cost a CI round because a new
user-invocable skill with **no row in
`docs/contracts/skill-dispositions.yaml`** passed every local check
(`audit-codex-parity --skill`, `heal --strict`, `sync-skill-counts`)
silently — the miss only surfaced in CI.

This adds the local catch: **`heal.sh` Check 12 — dispositions
coverage.** Every user-invocable `skills/<n>` must have a dispositions
row, else `MISSING_DISPOSITION` (exit 1 under `--strict`). Same
internal/non-invocable exemptions as the existing catalog check (Check
10).

## How
- `heal.sh`: new Check 12 (global), plus a `HEAL_REPO_ROOT` env override
so the check is fixture-testable; production still derives `REPO_ROOT`
from script location.
- Verified **no `MISSING_DISPOSITION` on the real repo** — all current
skills are covered, so this is a pure tightening with zero false
positives.

## Tests (TDD, red→green)
`tests/scripts/heal-dispositions.bats` — fixture skill missing a row →
flagged; with a row → clean; `--strict` exits 1 and names the miss. All
3 green.

## Codex artifact note
Editing `skills/heal-skill/` requires a paired
`skills-codex/heal-skill/` update (the source-hash). I refreshed **only
heal-skill's** `.agentops-generated.json` + its manifest entry. The 6
unrelated pre-existing codex-hash drifts on `main`
(deps/trace/scenario/provenance/red-team/release) are **left untouched**
— out of this PR's scope. PR-diff-scoped
`validate-codex-generated-artifacts.sh --scope head` passes.

## Remaining ag-cw2y items (follow-on)
Item 1 (dispositions) is the check half done here. Items 2 (domain-map
narrative counts), 3 (codex desc budget / ag-vzbt), 4 (codex
override-catalog scaffold) + the skill-builder *scaffold* halves remain
— they fully unblock `ag-hdqu0.8` and `/burndown` #600 one-shot-green.

Closes-scenario: ag-cw2y#dispositions-coverage-check
Bounded-context: BC2-validation
Evidence: tests/scripts/heal-dispositions.bats
boshu2 added a commit that referenced this pull request May 29, 2026
…unts (ag-cw2y items 1-scaffold + 2) (#610)

## What

Completes **ag-cw2y item 1's scaffold-half + item 2**. A
newly-scaffolded skill is now one-shot-green against the two gates that
silently tripped `/burndown` #600:
1. missing `skill-dispositions.yaml` row → `heal.sh` Check 12
(`MISSING_DISPOSITION`, shipped #609)
2. stale `"N checked-in skills"` narrative counts →
`check-registry-drift`

## How
- **`scripts/append-skill-disposition.sh`** — idempotent helper that
appends a dispositions row (valid `BC4 Factory` placeholder + TODO
rationale, so `check-bounded-contexts-drift` passes; author refines
during content fill). Repo-root-injectable → fixture-testable.
- **`init.sh`** — after scaffolding, calls the helper *and* runs
`check-registry-drift.sh --fix-counts` to bump the narrative skill-count
tokens. Both calls are guarded + WARN-on-failure so they never break the
scaffold.

## Discovery (scope-narrowing)
Item 2's **check + `--fix-counts` already existed** and were wired into
both the fast pre-push gate (line 1330) and CI (line 803). The only gap
was that **skill-builder never invoked them** — so the fix is wiring,
not a new check.

## Tests (TDD, red→green)
`tests/scripts/append-skill-disposition.bats` — appends row / valid BC +
TODO / idempotent / no-dup-on-existing. 4/4 green. shellcheck clean.

## Codex artifact
Refreshed **only skill-builder's** source/generated hash (6 unrelated
pre-existing `main` drifts left untouched). PR-scope
`validate-codex-generated-artifacts --scope head` passes.

## ag-cw2y remaining
Item 1 (check #609 + scaffold here) ✅ · Item 2 (here) ✅ · **Item 3**
(codex desc budget / `ag-vzbt`) and **Item 4** (override-catalog
scaffold + `test-codex-override-coverage`) remain — then `ag-hdqu0.8`
and `/burndown` #600 are fully one-shot-green.

Closes-scenario: ag-cw2y#skillbuilder-scaffold-dispositions-counts
Bounded-context: BC4-factory
Evidence: tests/scripts/append-skill-disposition.bats
boshu2 added a commit that referenced this pull request May 30, 2026
…g-cw2y item 4) (#611)

## What
**ag-cw2y item 4** — the 4th and last new-skill gate that cost
`/burndown` #600 a CI round. A new skill previously tripped
`validate-codex-override-coverage` ("source skill missing from Codex
catalog"). skill-builder now adds the catalog entry automatically.

## How
- **`scripts/append-codex-override-entry.sh`** — idempotent, JSON-aware:
appends a `parity_only` entry
(`name`/`treatment`/`wave=catalog-parity`/`reason`) to
`skills-codex-overrides/catalog.json` if the skill is absent.
`parity_only` is correct for skill-builder's canonical-derived codex
form; author flips to `bespoke` + scaffolds the override dir only if a
Codex-only divergence is needed. Repo-root-injectable.
- **`init.sh`** — calls it in the new-skill plumbing block alongside the
dispositions row (#609/#610) and `--fix-counts` (#610). All three gates
now pre-empted at scaffold time.

## Tests (TDD, red→green)
`tests/scripts/append-codex-override-entry.bats` — appends parity_only /
stays valid JSON / idempotent / no-dup-on-existing. 4/4 green.
shellcheck clean.

## Codex artifact
Refreshed **only skill-builder's** hash (6 unrelated pre-existing `main`
drifts untouched). PR-scope codex validation passes.

## ag-cw2y status after this
Item 1 (#609 check + #610 scaffold) ✅ · Item 2 (#610) ✅ · **Item 4
(here)** ✅ · **Item 3** (codex desc token budget / `ag-vzbt`) is the
only remaining piece. Once item 3 lands, a new skill — and therefore
`ag-hdqu0.8` + `/burndown` #600 — is fully one-shot-green.

Closes-scenario: ag-cw2y#override-catalog-scaffold
Bounded-context: BC4-factory
Evidence: tests/scripts/append-codex-override-entry.bats
boshu2 added a commit that referenced this pull request May 30, 2026
…egate (ag-vzbt) (#612)

## What
**ag-vzbt** — the last `ag-cw2y` item. The skills-codex description
catalog budget was a **hard aggregate** (2800 chars, bumped
2600→2700→2800 as skills landed) with ~17 chars headroom. Adding the
Nth+ skill walls out — `/burndown` #600 was forced into a 17-char stub
("Bounded epic loop") to fit.

## How
Replace the hard aggregate with a **per-skill average** cap
(`CODEX_DESC_AVG_FAIL_CHARS=45`) that scales with the catalog:
- Each terse description keeps the average low; the gate fails only if
descriptions are **bloated on average** — not because the catalog grew.
- Current state: avg **35** chars/skill (77% of 45) — real headroom, and
it never becomes a wall again.
- The per-skill hard cap (`DESC_FAIL_CHARS=180`) still bounds any single
bloated description.
- `BUDGET_REPO_ROOT` override added so the rule is fixture-testable.

## Tests (TDD, red→green)
`tests/scripts/codex-desc-avg-budget.bats` — PASS under budget / FAIL
over budget / **100 skills (total ~3800 > old 2800 wall) still pass**
because avg stays low. 3/3 green; shellcheck clean; real-repo gate
passes (avg 35/45).

## ⚠️ Pre-existing unrelated red
The local fast gate also surfaces a **pre-existing** `mkdocs strict`
failure on `rfcs/0001-finding-generator-parallelism.md` — reproduces on
clean `origin/main` with my changes stashed; my diff touches only the
test script + bats (zero docs). Flagging separately; not in scope here.

## ag-cw2y status
**All four items now done** (items 1,2,4 merged #609/#610/#611; item 3
here). A brand-new skill is now **one-shot-green** → this unblocks
**`ag-hdqu0.8`** (last Outcomes bead) and **`/burndown` #600**.

Closes-scenario: ag-vzbt#per-skill-average-budget
Bounded-context: BC2-validation
Evidence: tests/scripts/codex-desc-avg-budget.bats
boshu2 added 3 commits May 29, 2026 20:36
…burndown-skill)

The terminating counterpart to open-ended /evolve: drive a finite target
(epic / set of epics / explicit bead list) to every in-scope bead merged on
main via bounded /rpi cycles, then STOP. Fills the gap left by crank
(parallel-wave one-shot), autodev (contract-only), and evolve (open-ended,
dormant-never-complete).

Per-cycle idempotent algorithm (cron / ScheduleWakeup / in-session safe):
reconcile one outstanding tick-PR (CI-green→merge, pending→skip, red→fix) →
completion-check (all in-scope merged → DONE/STOP) → pick ONE in-scope ready
bead → drive in worktree → PR with trailers → loop. Finite stops: target
merged | --max-cycles=N | operator STOP/hold | genuine blocker.

Dual-runtime triad: skills/burndown/SKILL.md + skills-codex/burndown/SKILL.md;
audit-codex-parity PASS, heal --strict PASS, skill counts synced 76→77,
context-map regenerated, embedded skills synced.

Closes-scenario: ag-3yl8#burndown-skill
Bounded-context: BC5-Runtime
Evidence: skills/burndown/SKILL.md
…ives (ag-3yl8)

CI contracts-sync caught drift local gates missed: burndown needed a
skill-dispositions.yaml row (BC3 Loop, domain) and the skill-domain-map +
domain-evolution-bdd narrative counts needed 76→77. Regenerated the domain map;
check-registry-drift, skill-domain-map --check, and full codex-parity now green.
…g-3yl8)

Rebased onto main (4d18300) after ag-cw2y landed the new-skill plumbing.
Re-derived all 4 gate surfaces via the now-canonical tools instead of the
stale manual artifacts:
- skill-dispositions.yaml row (carried)
- skill counts synced (sync-skill-counts.sh -> 79 total, 69 user-facing)
- codex registration (register-new-codex-skill.sh: manifest entry + catalog
  + marker, parity_only) + authored skills-codex/burndown/prompt.md
- restored 2 rows (automation-shape-routing, workflow-builder) a conflict
  resolution had dropped; reverted 7 pre-existing unrelated codex drifts

Evidence: validate-codex-override-coverage (79 ok), validate-codex-generated-artifacts
--scope head (ok), test-codex-sync-manifest-catalog (2/0), audit-codex-parity --skill
burndown (ok).

ag-3yl8
@boshu2 boshu2 force-pushed the feat/ag-3yl8-burndown-skill branch from b919ccb to 9ca775c Compare May 30, 2026 00:47
contracts-sync + correctness(ubuntu) were red: registry.json was stale
(missing skill:burndown). Ran scripts/generate-registry.sh -> 79 skills,
161 SKU capabilities. generate-registry.sh --check now OK.

Evidence: scripts/generate-registry.sh --check -> 'registry.json is up to date'.

ag-3yl8
@boshu2 boshu2 merged commit 606ae03 into main May 30, 2026
14 checks passed
@boshu2 boshu2 deleted the feat/ag-3yl8-burndown-skill branch May 30, 2026 01:06
boshu2 added a commit that referenced this pull request May 30, 2026
…shot-green surface (ag-ekyq #scaffold-registry-regen) (#614)

## What

skill-builder's `init.sh` new-skill plumbing (ag-cw2y) wired **4 of 5**
derived surfaces — dispositions, narrative counts, codex
override-catalog — but **not** the `registry.json` SKU catalog. A stale
`registry.json` trips `contracts-sync` ("registry.json is stale") AND
`correctness(ubuntu)` ("SKU_CATALOG: DRIFT") together.

This was the **most-missed surface** this session: it cost `/burndown`
#600 a 2nd fix-and-repush (`22a0af2f`) and was a manual
`generate-registry.sh` step for `/eval-outcomes` (#613).

## How

Adds `generate-registry.sh` as plumbing **step 4** in `init.sh`,
positioned **last** (it scans the whole `skills/` tree, so the skeleton
+ the other 3 surfaces must exist on disk first), guarded with a `WARN`
fallback like its siblings. A new skill is now one-shot-green across all
5 surfaces with zero manual regen.

## TDD

`tests/scripts/scaffold-registry-regen.bats` (4/4 green) locks the
wiring + ordering contract: init.sh invokes the canonical generator,
guarded, after the override-catalog step and before the final skeleton
echo. `generate-registry.sh` is not repo-root-injectable (it reads
hooks/types.go/schedule across the tree), so the contract is the
wiring+ordering; the end-to-end behavior was empirically validated this
session running `generate-registry.sh` on the freshly-scaffolded
`/eval-outcomes` (#613, registry included the new skill).

## Scope

Reverted the 7 pre-existing-main codex `.agentops-generated.json` drifts
that `regen-codex-hashes` swept in; surgically rebuilt the manifest to
skill-builder's hash delta only (changing init.sh refreshes
skill-builder's codex twin hash — a real consequence of this diff).

Closes-scenario: ag-ekyq#scaffold-registry-regen
Bounded-context: BC4-Factory
Evidence: tests/scripts/scaffold-registry-regen.bats
boshu2 added a commit that referenced this pull request May 30, 2026
…ag-j4l1 #evolve-discipline-references) (#615)

## What

Promotes this session's hard-won fix-and-repush discipline — which lived
only in the **session-only cron prompt** (expires in 7 days) — into the
**durable `/evolve` skill**, so every future autonomous run inherits it.

## How

- **NEW** `skills/evolve/references/new-skill-landing.md` — the **six
derived surfaces** a new/modified skill must regenerate in one shot
(registry.json being the most-missed; it trips `contracts-sync` +
`correctness(ubuntu)` together), with the `regen-all.sh` shortcut and
the manual codex-twin / `SKILL-TIERS.md` steps.
- `gate-hygiene.md` **+2 subsections**: pre-push **diff-scope check**
(catches half-staged commits like #612 + conflict-resolution collateral
deletions like #600) and **pre-existing-vs-mine red triage**
(mkdocs-strict + the 7 codex `.agentops-generated.json` drifts).
- `SKILL.md` links both from Step 4.5 + the References list.

## Dog-fooding

Built one-shot through its own documented discipline: codex twin hash
refreshed for `evolve`, the 7 pre-existing codex drifts reverted,
manifest surgically rebuilt to the `evolve` delta only. No
inventory/count files touched (correct — adds references, not a skill).

## Evidence

- `tests/scripts/evolve-discipline-references.bats` → **4/4** (locks
both reference links + the two new gate-hygiene subsections)
- `heal.sh --strict skills/evolve` → clean
- `validate-codex-generated-artifacts.sh --scope worktree` → pass

(Companion: ag-cw2y wired the skill-builder *scaffold*; ag-ekyq added
the registry surface; this bakes the operator-side *runtime guidance*
into /evolve.)

Closes-scenario: ag-j4l1#evolve-discipline-references
Bounded-context: BC2-Validation
Evidence: skills/evolve/references/new-skill-landing.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant