@ikon85/agent-workflow-kit 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.agents/skills/grill-me/SKILL.md +3 -1
  2. package/.agents/skills/grill-with-docs/SKILL.md +3 -1
  3. package/.agents/skills/kit-update/SKILL.md +9 -11
  4. package/.agents/skills/orchestrate-wave/SKILL.md +8 -8
  5. package/.agents/skills/setup-workflow/SKILL.md +20 -18
  6. package/.agents/skills/setup-workflow/board-sync.md +4 -1
  7. package/.agents/skills/setup-workflow/workflow-advisories.md +3 -2
  8. package/.agents/skills/setup-workflow/worktree-lifecycle.md +36 -31
  9. package/.agents/skills/to-issues/SKILL.md +43 -0
  10. package/.agents/skills/wrapup/SKILL.md +98 -54
  11. package/.claude/skills/grill-me/SKILL.md +3 -1
  12. package/.claude/skills/grill-me-codex/SKILL.md +3 -1
  13. package/.claude/skills/grill-with-docs/SKILL.md +3 -1
  14. package/.claude/skills/grill-with-docs-codex/SKILL.md +3 -1
  15. package/.claude/skills/kit-update/SKILL.md +9 -11
  16. package/.claude/skills/orchestrate-wave/SKILL.md +8 -8
  17. package/.claude/skills/setup-workflow/SKILL.md +20 -18
  18. package/.claude/skills/setup-workflow/board-sync.md +4 -1
  19. package/.claude/skills/setup-workflow/workflow-advisories.md +3 -2
  20. package/.claude/skills/setup-workflow/worktree-lifecycle.md +36 -31
  21. package/.claude/skills/to-issues/SKILL.md +43 -0
  22. package/.claude/skills/wrapup/SKILL.md +98 -54
  23. package/README.md +249 -7
  24. package/agent-workflow-kit.package.json +42 -42
  25. package/package.json +16 -12
  26. package/scripts/marker_lib.py +3 -0
  27. package/scripts/profile_globs.py +26 -45
  28. package/scripts/release-delta-guard.mjs +26 -9
  29. package/scripts/worktree-lifecycle/README.md +57 -160
  30. package/scripts/worktree-lifecycle/capabilities.json +2 -3
  31. package/scripts/worktree-lifecycle/classify.py +480 -0
  32. package/scripts/worktree-lifecycle/cleanup.py +9 -29
  33. package/scripts/worktree-lifecycle/core.py +68 -1429
  34. package/scripts/worktree-lifecycle/ignore_seed.py +1 -1
  35. package/scripts/worktree-lifecycle/profile.py +46 -29
  36. package/scripts/worktree-lifecycle/setup.py +7 -19
  37. package/scripts/wrapup-land.py +1292 -545
  38. package/src/consumer-migrations.json +1 -16
  39. package/src/lib/bundle.mjs +31 -1
  40. package/docs/adr/0001-consumer-divergence-policy.md +0 -53
  41. package/docs/adr/0002-capability-gated-orchestration.md +0 -70
  42. package/docs/adr/0003-kit-core-and-project-extension-lifecycle.md +0 -63
  43. package/docs/adr/0004-release-intent-is-a-version-tag.md +0 -64
  44. package/docs/adr/0005-to-issues-is-the-planning-facade.md +0 -42
  45. package/docs/adr/0006-routing-knowledge-access-and-policy-are-separate.md +0 -95
  46. package/docs/adr/0007-session-teardown-requires-provenance-bound-ownership.md +0 -88
  47. package/docs/adr/0008-planning-ignore-rules-are-offered-never-installed.md +0 -84
  48. package/docs/adr/0009-teardown-authority-is-stateless-repository-classification.md +0 -101
  49. package/docs/adr/0010-model-roster-replaces-the-optimization-dial.md +0 -87
  50. package/docs/agents/board-sync.md +0 -74
  51. package/docs/agents/code-review.md +0 -14
  52. package/docs/agents/workflow-capabilities.json +0 -28
  53. package/docs/research/agent-task-taxonomy-benchmark-coverage.md +0 -451
  54. package/docs/research/benchlm-routing-source.md +0 -198
  55. package/docs/research/consumer-owned-protocol-files.md +0 -238
  56. package/docs/research/frontend-agent-benchmarks.md +0 -282
  57. package/docs/research/model-effort-routing-benchmarks.md +0 -261
  58. package/docs/research/provider-neutral-agent-routing.md +0 -207
  59. package/docs/research/wave-152-consumer-acceptance.md +0 -98
  60. package/docs/research/wave-43-script-hook-census.md +0 -128
  61. package/scripts/build-kit.mjs +0 -117
  62. package/scripts/build-kit.test.mjs +0 -207
  63. package/scripts/census/census.test.mjs +0 -252
  64. package/scripts/census/state.test.mjs +0 -15
  65. package/scripts/census/transaction.test.mjs +0 -103
  66. package/scripts/census-contract.test.mjs +0 -227
  67. package/scripts/check-kit-staleness.mjs +0 -45
  68. package/scripts/check-kit-staleness.test.mjs +0 -19
  69. package/scripts/codex-exec-scenarios/fake-codex.mjs +0 -165
  70. package/scripts/codex-exec.test.mjs +0 -871
  71. package/scripts/grill-census-wiring-guard.mjs +0 -87
  72. package/scripts/grill-census-wiring-guard.test.mjs +0 -107
  73. package/scripts/kit-release.test.mjs +0 -273
  74. package/scripts/kit-update-pr.test.mjs +0 -151
  75. package/scripts/lib/audit-refs.mjs +0 -146
  76. package/scripts/lib/scrub.mjs +0 -113
  77. package/scripts/lib/scrub.test.mjs +0 -187
  78. package/scripts/memory-lifecycle/memory-lifecycle.test.mjs +0 -170
  79. package/scripts/portability_profile_scan.py +0 -53
  80. package/scripts/release-delta-guard.test.mjs +0 -174
  81. package/scripts/release-parity.test.mjs +0 -90
  82. package/scripts/release-state.test.mjs +0 -360
  83. package/scripts/test_anchor_table.py +0 -69
  84. package/scripts/test_board_bootstrap.py +0 -348
  85. package/scripts/test_board_sync.py +0 -208
  86. package/scripts/test_board_sync_create_idempotency.py +0 -117
  87. package/scripts/test_board_sync_wave_title.py +0 -120
  88. package/scripts/test_census_backstop.py +0 -712
  89. package/scripts/test_census_forward_contract.py +0 -91
  90. package/scripts/test_census_update_contract.test.mjs +0 -454
  91. package/scripts/test_codex_adapter_sync_contract.py +0 -169
  92. package/scripts/test_dist_kit_smoke.py +0 -220
  93. package/scripts/test_drift_guard_diagnostics.py +0 -295
  94. package/scripts/test_issue_claim_contract.py +0 -169
  95. package/scripts/test_kit_docs_language_census.py +0 -178
  96. package/scripts/test_marker_lib.py +0 -162
  97. package/scripts/test_orchestrate_wave_contract.py +0 -381
  98. package/scripts/test_pr_body_check.py +0 -264
  99. package/scripts/test_profile_globs.py +0 -280
  100. package/scripts/test_program_planning_contract.py +0 -133
  101. package/scripts/test_release_authorization_contract.py +0 -101
  102. package/scripts/test_render_anchor.py +0 -267
  103. package/scripts/test_retro_wrapup_contract.py +0 -153
  104. package/scripts/test_skill_code_review_seed.py +0 -89
  105. package/scripts/test_skill_codex_exec_lifecycle.py +0 -123
  106. package/scripts/test_skill_frontmatter_lint.py +0 -234
  107. package/scripts/test_skill_gh_lint.py +0 -124
  108. package/scripts/test_skill_language_census.py +0 -254
  109. package/scripts/test_skill_optional_readiness.py +0 -171
  110. package/scripts/test_skill_portability_lint.py +0 -866
  111. package/scripts/test_skill_precommit_template.py +0 -30
  112. package/scripts/test_skill_publish_audit.py +0 -358
  113. package/scripts/test_skill_readiness_contract.py +0 -264
  114. package/scripts/test_skill_readiness_preflight.py +0 -180
  115. package/scripts/test_skill_required_readiness.py +0 -233
  116. package/scripts/test_skill_selfcontainment_lint.py +0 -255
  117. package/scripts/test_skill_setup_workflow_seeds.py +0 -691
  118. package/scripts/test_skill_stale_name_lint.py +0 -126
  119. package/scripts/test_skill_surface_refs.py +0 -300
  120. package/scripts/test_skill_trailing_artifact_lint.py +0 -71
  121. package/scripts/test_tdd_contract.py +0 -78
  122. package/scripts/test_worktree_ignore_seed.py +0 -320
  123. package/scripts/test_worktree_setup_base_guard.py +0 -140
  124. package/scripts/test_worktree_wrapup_contract.py +0 -1737
  125. package/scripts/test_wrapup_land.py +0 -428
  126. package/scripts/worktree-lifecycle/session.py +0 -1857
@@ -1,101 +0,0 @@
1
- # Teardown authority is stateless repository classification
2
-
3
- Status: accepted (2026-07-27, #320) — supersedes
4
- [ADR-0007](./0007-session-teardown-requires-provenance-bound-ownership.md)
5
-
6
- ADR-0007 derived teardown authority from persisted lifecycle evidence:
7
- ownership-proof refs acquired in atomic git transactions, frozen
8
- landing-attempt journals, baseline digests, no-follow identity binding, and a
9
- post-merge reload of the canonical cleanup policy. Every piece was locally
10
- justified, and the aggregate failed in practice: fifteen teardown/cleanup
11
- issues in two weeks (#245–#319), ~5,600 lines of lifecycle code, two recovery
12
- flags for the machinery's own bookkeeping, a legacy receipt contract, and
13
- refusals that did not name their cause (#319: 68,856 paths, 7.4 MB, zero
14
- actionable lines). The protection was aimed at narrow races between assessment
15
- and deletion; the cost was that ordinary sessions could no longer finish.
16
-
17
- We decided that teardown authority comes from the repository's **current
18
- state**, read at the moment of action, and from nothing else:
19
-
20
- 1. **Git's own classification is the file taxonomy.** A tracked modification
21
- blocks teardown. An untracked, non-ignored file blocks with a bounded
22
- report (count plus top directories — never an unbounded path dump). An
23
- ignored file is Scratch: the repository declared it not-work, and it is
24
- deletable. "Ignored" means git's standard exclude sources
25
- (`--exclude-standard`: repository `.gitignore` files, `.git/info/exclude`,
26
- the global excludes file) — whatever the repository's own tooling treats as
27
- ignored is deletion authority here too.
28
- 2. **One hardcoded exception: `.env*` (basename glob).** Ignored yet
29
- potentially irreplaceable. Before removal each `.env*` regular file is
30
- compared byte-wise with its counterpart at the same relative path in the
31
- main checkout, both opened no-follow: identical → derived copy, deletable;
32
- divergent, absent in the main checkout, or either side not a regular file →
33
- block with the exact files named. The check is a present-state comparison,
34
- not a receipt.
35
- 3. **The platform PR record authorizes branch deletion.** Force-deletion
36
- requires exactly one PR matching the full tuple — this repository as base
37
- repo, head repository equal to the base repo (no fork heads), head ref
38
- equal to the branch name, base ref equal to the configured protected
39
- branch, state merged — whose head SHA equals the branch tip OID; the OID
40
- is re-read immediately before deletion, and zero matches, multiple
41
- matches, an open PR on the same head, or any drift retains the branch.
42
- Ancestry-merged branches (against a freshly fetched configured protected
43
- branch — stale ancestry stops rather than guesses) delete normally. A
44
- branch with neither stays and is reported. Without platform access this
45
- degrades to ancestry-only, reported honestly.
46
- 4. **Idempotency by re-check, not journal.** An interrupted landing is resumed
47
- by re-running it; every step verifies present state (PR exists? merged?
48
- worktree present?) and skips or proceeds. There is no persisted attempt
49
- state to validate, archive, or recover.
50
- 5. **A direct `/wrapup` invocation is the teardown authorization.** It lands
51
- and tears down the worktree it runs in — including worktrees created by
52
- external tools under foreign names and paths. The kit never conditions
53
- teardown on its own naming or location conventions; the four classification
54
- rules above are the only protection.
55
- 6. **Deletion policy has exactly one configuration surface: the ignore
56
- mechanism.** The consumer profile keeps structural facts only (worktree
57
- root, templates, protected branches, sweep opt-in). `scratchPatterns` and
58
- `landingGeneratedArtifactPatterns` are removed without migration —
59
- including the shipped consumer migration that seeded them; making a file
60
- deletable means ignoring it (ADR-0008's offered seeding remains the
61
- supported way; its consequence about deriving `scratchPatterns` from the
62
- seeded rules is obsolete with this decision).
63
-
64
- ## Considered options
65
-
66
- - **Keep ADR-0007's provenance machinery:** rejected on empirical grounds. The
67
- races it closes (a foreign file occupying an assessed path between
68
- assessment and deletion, a same-name branch created concurrently) are rare
69
- and low-harm next to the observed failure mode: routine teardown becoming
70
- impossible and each repair adding machinery. The branch race is additionally
71
- closed cheaper by the tip-SHA/PR comparison.
72
- - **Shipping default scratch patterns:** rejected. A default allowlist of the
73
- deletable restarts the pattern catalog and its seeding, sync, and dialect
74
- problems; `.gitignore` already encodes the same fact with universal
75
- tooling.
76
- - **Migrating existing profiles and receipts:** rejected. The green-slate cut
77
- is deliberate (#320): old keys are ignored, journaled attempts are inert
78
- files, and no code path reads either. Maintaining both models would preserve
79
- the complexity this decision removes.
80
- - **Location heuristic for externally created worktrees (land, don't tear
81
- down):** rejected by the user. `/wrapup` means tear down; splitting the
82
- outcome by worktree origin reintroduces an ownership notion.
83
-
84
- ## Consequences
85
-
86
- - A worktree whose only untracked content is ignored dependency or build
87
- output is removable with zero configuration. #319's failure class cannot
88
- occur.
89
- - Refusals are bounded and name their cause; the fix is always visible
90
- (commit the tracked change, handle the named `.env*`, ignore or remove the
91
- named untracked files).
92
- - The accepted residual risk is explicit: between assessment and deletion a
93
- file could in principle be replaced; a valuable file a consumer keeps
94
- gitignored outside `.env*` is deletable at teardown. We trade these narrow
95
- windows for a lifecycle that ordinary sessions can actually complete.
96
- - Planning sessions stop being a special case: durable content lands through
97
- wrapup's Content route as ordinary work, scratch dies with the worktree,
98
- and worktree creation binds to implementation, not planning.
99
- - The lifecycle implementation shrinks from a transaction protocol to a
100
- classification function plus plumbing; its tests shift from race
101
- choreography to classification truth tables.
@@ -1,87 +0,0 @@
1
- # A Model roster replaces the optimization dial
2
-
3
- Status: accepted (2026-07-27, Program #287, Welle 18 / #294) — supersedes the
4
- Routing-policy clause of
5
- [ADR-0006](./0006-routing-knowledge-access-and-policy-are-separate.md)
6
-
7
- ADR-0006 made "optimization goals and optional advanced overrides" inputs of
8
- the Routing policy, and setup asked the user to pick Balanced, Quality, or
9
- Cost. That dial cannot be made to work. The goal is always the right model for
10
- the job, and a cheap-but-weak model can cost more per completed task than a
11
- strong one — so a Cost dial does not express a preference the resolver can act
12
- on without knowing cost per *completed* task, which no benchmark owner
13
- publishes. Meanwhile the dial was never read: `readRoutingProfile` has zero
14
- callers and `resolveRoute` always returns `routing-infrastructure-missing`.
15
-
16
- We decided the user control is a **Model roster** — a positive list of
17
- model-and-effort pairs the user authorizes — plus three **Standard routes**
18
- that decide when no decisive evidence covers the resolved Routing intent.
19
-
20
- 1. **The optimization dial is removed everywhere it appears, not only from the
21
- Routing policy.** The Routing intent loses its optimization goal too. What a
22
- user is willing to spend is a Routing profile choice, not a property of the
23
- work; leaving the field in the intent while the resolver ignores it would
24
- leave a dead concept in the domain language. The glossary entry and the
25
- intent schema both drop it.
26
- 2. **`unreachable` and `missingInfrastructure` are kept.** They are unrelated to
27
- the dial, and the resolver's fallback semantics depend on them.
28
- 3. **Transport authorization belongs to the Routing profile.** Selecting Claude
29
- Code and Codex does not authorize either to drive the other's CLI. ADR-0006
30
- is already explicit that a detected transport is not an approved one; this
31
- ADR names where the approval is stored — the global profile document, as its
32
- own interview answer, narrowable per project by intersection only.
33
- 4. **The Routing policy is derived, not stored.** The profile is the stored
34
- personal choice and carries no revision. The policy is the constraint object
35
- derived from profile plus inventory for one dispatch, and it carries the
36
- composed revision so a Dispatch receipt can prove which constraints applied.
37
- 5. **Cost is displayed and used as a tiebreak inside a cohort of identical
38
- currency and unit — never as the ranking motor.** This is what the Cost dial
39
- was reaching for, at the only altitude where it is honest.
40
- 6. **The Kit ships no opinion about which models are good.** Excluding a model
41
- is one user's preference under one subscription, not a default truth. The
42
- inventory stays unfiltered per ADR-0006; the roster authorizes.
43
-
44
- ## `inherit` is retained, and the condition that would have removed it
45
-
46
- This ADR was drafted to remove `inherit` entirely if verify-spike 18c (#296)
47
- could not prove that the session-default model-and-effort pair is readable back
48
- and identifiable against the roster. **The spike came back positive, so
49
- `inherit` is retained** in the constrained form: inheritance is permitted only
50
- when the session-default pair is attested *and* inside the effective roster,
51
- and otherwise blocks.
52
-
53
- The condition under which `inherit` is removed entirely therefore stands as a
54
- standing test, not a settled negative: **if the session-default pair ceases to
55
- be readable back on a surface, `inherit` is removed for that surface rather
56
- than left as an unprovable path.** A receipt that cannot name the pair it
57
- inherited is not proof of anything.
58
-
59
- The spike qualifies the retention with an identification requirement. One and
60
- the same Claude Code session reports its default model under three different
61
- identifiers — `opus[1m]` in `~/.claude/settings.json`, `claude-opus-5[1m]` in
62
- the session's init event, and `claude-opus-5` in the server-returned
63
- `message.model`. The attested channel is the one that drops the context
64
- variant. Roster identification therefore requires an explicit normalization
65
- rule and a decision on whether the context variant is part of pair identity;
66
- until that rule exists, "identified against the roster" is not a check a
67
- receipt may claim to have made.
68
-
69
- ## Consequences
70
-
71
- - ADR-0006's Routing-policy clause (item 3, "optimization goals and optional
72
- advanced overrides") and its closing sentence "Model preferences and
73
- optimization overrides remain optional advanced settings" no longer describe
74
- the system. The rest of ADR-0006 — the separation of Evidence catalog, Access
75
- graph, and Routing policy; detection is not authorization; the surface
76
- adapter capability declaration; the Dispatch receipt requirement — stands
77
- unchanged and remains the foundation this ADR builds on.
78
- - `advanced.optimization` is removed from the Routing profile schema, and
79
- `optimization` from the Routing policy schema, each with a deterministic
80
- version-aware decoder that records the drop rather than silently discarding a
81
- choice the user made.
82
- - Setup's Balanced / Quality / Cost prompt is replaced by roster admission and
83
- Standard-route nomination.
84
- - Model-and-effort is pair identity. Effort domains are per model — some models
85
- support an effort level others do not, and some carry no effort axis at all —
86
- so a pair is authorized as a pair, never as a model with an effort attached
87
- afterwards.
@@ -1,74 +0,0 @@
1
- <!-- setup-workflow: state=filled; mode=github-projects-v2 -->
2
- # Board sync — GitHub Projects field IDs
3
-
4
- The workflow board is [Agent Workflow Kit](https://github.com/users/iKon85/projects/3). Board-managed skills address it through the profile below and `scripts/board-sync.py`.
5
-
6
- <!-- board-sync:profile -->
7
- ```json
8
- {
9
- "repo": "iKon85/agent-workflow-kit",
10
- "project": {
11
- "number": 3,
12
- "owner": "iKon85",
13
- "nodeId": "PVT_kwHOAuH31M4BdM5V"
14
- },
15
- "fields": {
16
- "status": {
17
- "id": "PVTSSF_lAHOAuH31M4BdM5VzhXwFOk",
18
- "options": {
19
- "Idea": "357a9b54",
20
- "Triaged": "463d3f21",
21
- "Spec": "1cd0343b",
22
- "In Progress": "35e6c509",
23
- "Review": "51f16b28",
24
- "Done": "491150b6"
25
- },
26
- "roles": {
27
- "idea": "Idea",
28
- "triaged": "Triaged",
29
- "spec": "Spec",
30
- "inProgress": "In Progress",
31
- "review": "Review",
32
- "done": "Done"
33
- }
34
- },
35
- "wave": "PVTF_lAHOAuH31M4BdM5VzhXwFWg",
36
- "cluster": "PVTF_lAHOAuH31M4BdM5VzhXwFWk",
37
- "specPath": "PVTF_lAHOAuH31M4BdM5VzhXwFWo",
38
- "planPath": "PVTF_lAHOAuH31M4BdM5VzhXwFWs",
39
- "phase": {
40
- "id": "PVTSSF_lAHOAuH31M4BdM5VzhXwFWw",
41
- "options": {
42
- "P1": "9c8c93e0",
43
- "P2": "cf741bec",
44
- "P3": "8a69a61e"
45
- }
46
- }
47
- },
48
- "labels": {
49
- "readyForAgent": "ready-for-agent",
50
- "typePrefix": "type:",
51
- "clusterType": "type:cluster",
52
- "waveStub": "wave-stub",
53
- "programType": "type:program"
54
- },
55
- "branchPrefixes": ["feat", "fix", "chore", "docs"],
56
- "prMarkers": {
57
- "partOf": "Part of",
58
- "retroMarker": "**Retro:**",
59
- "retroValues": ["ran", "skipped"]
60
- },
61
- "headings": {
62
- "vorBau": "Clarify Before Build"
63
- },
64
- "titles": {
65
- "wavePrefix": "Welle"
66
- },
67
- "wrapup": {
68
- "remoteBranchSweep": true
69
- }
70
- }
71
- ```
72
-
73
- The Program route uses phases `P1`, `P2`, and `P3`. Saved board views remain a GitHub UI concern; the machine profile above is the workflow SSOT.
74
-
@@ -1,14 +0,0 @@
1
- <!-- setup-workflow: state=filled -->
2
- # Code-review project layer
3
-
4
- ## Standards sources in this repo
5
-
6
- - `CLAUDE.md` and `AGENTS.md`
7
- - `docs/conventions/`
8
- - The originating issue or PRD for the Spec axis
9
-
10
- ## Adjacent review tooling
11
-
12
- - `spec-self-critique` reviews plans before code exists; it does not replace diff review.
13
- - Security audits and simplification passes remain narrower complementary checks.
14
-
@@ -1,28 +0,0 @@
1
- {
2
- "worktreeLifecycle": {
3
- "enabled": true,
4
- "worktreeRoot": ".worktrees",
5
- "branchTemplate": "{type}/{issue}-{slug}",
6
- "pathTemplate": "{issue}-{slug}",
7
- "branchRegex": "^(?:feat|fix|chore|docs)/(?P<issue>\\d+)-",
8
- "mainBranches": ["main"],
9
- "protectedBranches": ["main"],
10
- "scratchPatterns": [
11
- "PLAN.md",
12
- "PLAN-REVIEW-LOG.md",
13
- ".claude/logs/**"
14
- ],
15
- "setupEntry": "python3 scripts/worktree-lifecycle/setup.py",
16
- "setupSteps": [],
17
- "riskyCommandPatterns": [
18
- "\\b(?:npm|pnpm|yarn)\\s+(?:run\\s+)?(?:test|typecheck|build)\\b",
19
- "\\bgit\\s+(?:commit|push)\\b"
20
- ]
21
- },
22
- "wrapup": {
23
- "landingGeneratedArtifactPatterns": [
24
- "dist-kit/**",
25
- "**/__pycache__/**"
26
- ]
27
- }
28
- }