@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
package/README.md CHANGED
@@ -169,9 +169,20 @@ enter outside the plan funnel and feed straight into Execute:
169
169
  > handoff.* The land phase puts mechanical gates in front of the commit.
170
170
 
171
171
  - **`wrapup`** — the land-and-clean closeout: make the branch landable, enforce
172
- the PR body contract, merge the PR, reconcile the board, sweep merged branches,
173
- and surface anything still open. It does not replace live verification; verify
174
- the user outcome before landing.
172
+ the PR body contract, merge the PR, reconcile the board, tear the finished
173
+ worktree down, retire the branch, sweep merged branches, and surface anything
174
+ still open. It does not replace live verification; verify the user outcome
175
+ before landing. Interrupted halfway? Re-run it — every step re-reads present
176
+ state (does the PR exist, is it merged, is the worktree still there?) and skips
177
+ what is already done, so there is no separate resume mode and no journal to
178
+ repair.
179
+ - **Teardown asks your repository, not a config file.** Finishing a worktree
180
+ classifies it with git's own file taxonomy at the moment it acts: a tracked
181
+ change or an unmerged path blocks, an untracked file your repo does *not*
182
+ ignore blocks with a bounded report, and an ignored entry is scratch that dies
183
+ with the worktree. Making something disposable therefore means ignoring it —
184
+ the full rules, the `.env*` exception, and the breaking change from the pattern
185
+ keys are in [the worktree lifecycle](#the-worktree-lifecycle).
175
186
  - **The pre-commit / pre-push gate fires automatically** — TypeScript, lint, and
176
187
  contract guards block a broken commit or push. You don't run a skill here; the
177
188
  gate was installed once at setup (`git-guardrails` / `setup-pre-commit`, both
@@ -307,6 +318,71 @@ Status stage names are yours too: scripts and skills address stages by semantic
307
318
  your option names, e.g. `board-sync.py add --status-role spec`), so a board in
308
319
  any language works — map each role once, rename an option with one profile edit.
309
320
 
321
+ ### The worktree lifecycle
322
+
323
+ An optional capability, offered once by `/setup-workflow` and recorded in your
324
+ own `docs/agents/workflow-capabilities.json`. Enabled, it gives each build its
325
+ own linked worktree: `python3 scripts/worktree-lifecycle/setup.py` cuts the
326
+ branch, creates the worktree from your naming templates, and runs your project's
327
+ setup steps; on Claude Code a set of hook adapters keeps edits, verification
328
+ commands, and Git mutations in the checkout they belong to; and `wrapup` tears
329
+ the worktree down after the merge. A worktree belongs to a **build** — a session
330
+ that only plans or grills stays in the main checkout, keeps its scratch on disk,
331
+ and lands its durable output as ordinary content.
332
+
333
+ The profile carries structural facts only: where worktrees live
334
+ (`worktreeRoot`), how branches and paths are named (`branchTemplate`,
335
+ `contentBranchTemplate`, `pathTemplate`, `branchRegex`), which branches are
336
+ protected (`mainBranches`, `protectedBranches`), the setup command and its
337
+ ordered steps, and the command patterns that must run inside the active
338
+ worktree. Keys the loader does not know are ignored in silence, so a profile
339
+ written for an older kit keeps working without warning noise.
340
+
341
+ **Teardown authority is the repository's current state, read at the moment of
342
+ action, and nothing else.** It classifies the worktree with git's own file
343
+ taxonomy over your standard exclude sources — the repository's `.gitignore`
344
+ files, `.git/info/exclude`, and your global excludes file:
345
+
346
+ | What git reports | What teardown does |
347
+ |---|---|
348
+ | a tracked modification, or an unmerged path | blocks, and names it |
349
+ | an untracked file you do **not** ignore | blocks with a bounded report — a count plus the top directories, never a page-long path dump |
350
+ | an ignored entry | scratch: deleted together with the worktree |
351
+
352
+ Two rules sit on top of that taxonomy. An `.env*` file (basename glob) is the
353
+ single hardcoded exception — ignored, yet potentially irreplaceable — so it is
354
+ removed only when it is byte-identical to the file at the same relative path in
355
+ your main checkout; divergent, missing there, or not a plain file stops teardown
356
+ and names the exact file. An ignored symlink is unlinked, never followed, and
357
+ only while its target stays inside the worktree: an absolute, escaping, dangling,
358
+ or since-changed target keeps the worktree and names the link.
359
+
360
+ Branch retirement is authorized, never assumed. A branch that is an ancestor of
361
+ the freshly fetched protected branch is deleted normally. A branch that is not is
362
+ force-deleted only when exactly one merged pull request matches it completely —
363
+ your repository as base, no fork head, the same head and base ref — and that
364
+ PR's head commit still equals the branch tip when the tip is re-read immediately
365
+ before deletion. Anything else keeps the branch and reports why. Without
366
+ platform access this degrades to ancestry only, and says so.
367
+
368
+ For a read-only inventory of every linked worktree and local branch — issue, PR,
369
+ merge, age, and removal facts, nothing removed — run
370
+ `python3 scripts/worktree-lifecycle/cleanup.py sweep`.
371
+
372
+ > **Breaking — the deletion pattern keys are gone, with no migration.** Earlier
373
+ > releases configured what teardown could delete with
374
+ > `worktreeLifecycle.scratchPatterns` and
375
+ > `wrapup.landingGeneratedArtifactPatterns`. Both keys are removed. Deletion
376
+ > policy now has exactly one configuration surface: the ignore mechanism. There
377
+ > is nothing to migrate — a profile that still carries either key simply keeps
378
+ > it as consumer data; nothing reads it, nothing warns, nothing rewrites it —
379
+ > but the behaviour did change. If you used a pattern to make a file deletable,
380
+ > ignore the file instead; `/setup-workflow` offers (never installs) the ignore
381
+ > rules for the planning artefacts the shipped skills write. And note the risk
382
+ > this deliberately accepts: a file you keep gitignored inside a worktree is
383
+ > deletable at teardown unless it matches `.env*`. The decision record is
384
+ > `docs/adr/0009-teardown-authority-is-stateless-repository-classification.md`.
385
+
310
386
  ### What's yours vs. the kit's
311
387
 
312
388
  `init` records a sha256 of every file it installs. That's the line between the
@@ -425,8 +501,42 @@ Explicit fork with its own identity and update line instead.
425
501
 
426
502
  ## Upgrade notes
427
503
 
504
+ ### 0.44.0 — teardown classifies, and the package ships less
505
+
506
+ **Action required only if your profile configured teardown patterns.**
507
+
508
+ `worktreeLifecycle.scratchPatterns` and `wrapup.landingGeneratedArtifactPatterns`
509
+ are gone, with no migration. Teardown now classifies what it may delete from the
510
+ repository's own ignore rules at the moment it acts, so the ignore mechanism is
511
+ the single place deletion policy is configured. A profile still carrying either
512
+ key simply keeps it, unread — nothing breaks, but the key no longer does
513
+ anything. Move whatever those patterns protected into `.gitignore` (to make it
514
+ deletable scratch) or out of the ignore rules (to make it a blocker).
515
+
516
+ Two consequences worth knowing before your next `/wrapup`:
517
+
518
+ - A gitignored file that is not `.env*` is deletable at teardown. That is the
519
+ deliberate trade for having no pattern list to maintain.
520
+ - The session-teardown CLI `scripts/worktree-lifecycle/session.py` is removed,
521
+ along with both of its recovery flags. Re-running the command is the recovery
522
+ route; there is no attempt journal to repair. Worktree creation now goes
523
+ through `scripts/worktree-lifecycle/setup.py`.
524
+
525
+ **The long "removed:" list in the release notes below is mostly narrower
526
+ packaging, not deleted features.** Tests, this repository's own ADRs and
527
+ research notes, and its build tooling stopped being published into
528
+ `node_modules`; none of them was ever installed into a consumer repo by `init`,
529
+ and every one of the 338 installed files is unchanged in scope. The only entry
530
+ that removes something consumers could have used is `session.py`.
531
+
428
532
  ### 0.38.0 — explicit landing-artifact policy
429
533
 
534
+ **Superseded — no action required.** A later release removed the pattern keys
535
+ without a migration: teardown now classifies from the repository's own ignore
536
+ rules, so `wrapup.landingGeneratedArtifactPatterns` is no longer read, the
537
+ requirement is no longer registered, and a profile still carrying the key
538
+ simply keeps it. The original note is kept below as history.
539
+
430
540
  Existing consumers must run `setup-workflow` once after `kit-update`, review
431
541
  the generated `wrapup.landingGeneratedArtifactPatterns` decision in
432
542
  `docs/agents/workflow-capabilities.json`, and commit that profile change.
@@ -469,6 +579,135 @@ the old way. Decision record:
469
579
 
470
580
  ## Release notes
471
581
 
582
+ ### 0.44.0
583
+
584
+ - added: `scripts/worktree-lifecycle/classify.py`
585
+ - removed: `docs/adr/0001-consumer-divergence-policy.md`
586
+ - removed: `docs/adr/0002-capability-gated-orchestration.md`
587
+ - removed: `docs/adr/0003-kit-core-and-project-extension-lifecycle.md`
588
+ - removed: `docs/adr/0004-release-intent-is-a-version-tag.md`
589
+ - removed: `docs/adr/0005-to-issues-is-the-planning-facade.md`
590
+ - removed: `docs/adr/0006-routing-knowledge-access-and-policy-are-separate.md`
591
+ - removed: `docs/adr/0007-session-teardown-requires-provenance-bound-ownership.md`
592
+ - removed: `docs/adr/0008-planning-ignore-rules-are-offered-never-installed.md`
593
+ - removed: `docs/adr/0009-teardown-authority-is-stateless-repository-classification.md`
594
+ - removed: `docs/adr/0010-model-roster-replaces-the-optimization-dial.md`
595
+ - removed: `docs/agents/board-sync.md`
596
+ - removed: `docs/agents/code-review.md`
597
+ - removed: `docs/agents/workflow-capabilities.json`
598
+ - removed: `docs/research/agent-task-taxonomy-benchmark-coverage.md`
599
+ - removed: `docs/research/benchlm-routing-source.md`
600
+ - removed: `docs/research/consumer-owned-protocol-files.md`
601
+ - removed: `docs/research/frontend-agent-benchmarks.md`
602
+ - removed: `docs/research/model-effort-routing-benchmarks.md`
603
+ - removed: `docs/research/provider-neutral-agent-routing.md`
604
+ - removed: `docs/research/wave-152-consumer-acceptance.md`
605
+ - removed: `docs/research/wave-43-script-hook-census.md`
606
+ - removed: `scripts/build-kit.mjs`
607
+ - removed: `scripts/build-kit.test.mjs`
608
+ - removed: `scripts/census-contract.test.mjs`
609
+ - removed: `scripts/census/census.test.mjs`
610
+ - removed: `scripts/census/state.test.mjs`
611
+ - removed: `scripts/census/transaction.test.mjs`
612
+ - removed: `scripts/check-kit-staleness.mjs`
613
+ - removed: `scripts/check-kit-staleness.test.mjs`
614
+ - removed: `scripts/codex-exec-scenarios/fake-codex.mjs`
615
+ - removed: `scripts/codex-exec.test.mjs`
616
+ - removed: `scripts/grill-census-wiring-guard.mjs`
617
+ - removed: `scripts/grill-census-wiring-guard.test.mjs`
618
+ - removed: `scripts/kit-release.test.mjs`
619
+ - removed: `scripts/kit-update-pr.test.mjs`
620
+ - removed: `scripts/lib/audit-refs.mjs`
621
+ - removed: `scripts/lib/scrub.mjs`
622
+ - removed: `scripts/lib/scrub.test.mjs`
623
+ - removed: `scripts/memory-lifecycle/memory-lifecycle.test.mjs`
624
+ - removed: `scripts/portability_profile_scan.py`
625
+ - removed: `scripts/release-delta-guard.test.mjs`
626
+ - removed: `scripts/release-parity.test.mjs`
627
+ - removed: `scripts/release-state.test.mjs`
628
+ - removed: `scripts/test_anchor_table.py`
629
+ - removed: `scripts/test_board_bootstrap.py`
630
+ - removed: `scripts/test_board_sync.py`
631
+ - removed: `scripts/test_board_sync_create_idempotency.py`
632
+ - removed: `scripts/test_board_sync_wave_title.py`
633
+ - removed: `scripts/test_census_backstop.py`
634
+ - removed: `scripts/test_census_forward_contract.py`
635
+ - removed: `scripts/test_census_update_contract.test.mjs`
636
+ - removed: `scripts/test_codex_adapter_sync_contract.py`
637
+ - removed: `scripts/test_dist_kit_smoke.py`
638
+ - removed: `scripts/test_drift_guard_diagnostics.py`
639
+ - removed: `scripts/test_issue_claim_contract.py`
640
+ - removed: `scripts/test_kit_docs_language_census.py`
641
+ - removed: `scripts/test_marker_lib.py`
642
+ - removed: `scripts/test_orchestrate_wave_contract.py`
643
+ - removed: `scripts/test_pr_body_check.py`
644
+ - removed: `scripts/test_profile_globs.py`
645
+ - removed: `scripts/test_program_planning_contract.py`
646
+ - removed: `scripts/test_release_authorization_contract.py`
647
+ - removed: `scripts/test_render_anchor.py`
648
+ - removed: `scripts/test_retro_wrapup_contract.py`
649
+ - removed: `scripts/test_skill_code_review_seed.py`
650
+ - removed: `scripts/test_skill_codex_exec_lifecycle.py`
651
+ - removed: `scripts/test_skill_frontmatter_lint.py`
652
+ - removed: `scripts/test_skill_gh_lint.py`
653
+ - removed: `scripts/test_skill_language_census.py`
654
+ - removed: `scripts/test_skill_optional_readiness.py`
655
+ - removed: `scripts/test_skill_portability_lint.py`
656
+ - removed: `scripts/test_skill_precommit_template.py`
657
+ - removed: `scripts/test_skill_publish_audit.py`
658
+ - removed: `scripts/test_skill_readiness_contract.py`
659
+ - removed: `scripts/test_skill_readiness_preflight.py`
660
+ - removed: `scripts/test_skill_required_readiness.py`
661
+ - removed: `scripts/test_skill_selfcontainment_lint.py`
662
+ - removed: `scripts/test_skill_setup_workflow_seeds.py`
663
+ - removed: `scripts/test_skill_stale_name_lint.py`
664
+ - removed: `scripts/test_skill_surface_refs.py`
665
+ - removed: `scripts/test_skill_trailing_artifact_lint.py`
666
+ - removed: `scripts/test_tdd_contract.py`
667
+ - removed: `scripts/test_worktree_ignore_seed.py`
668
+ - removed: `scripts/test_worktree_setup_base_guard.py`
669
+ - removed: `scripts/test_worktree_wrapup_contract.py`
670
+ - removed: `scripts/test_wrapup_land.py`
671
+ - removed: `scripts/worktree-lifecycle/session.py`
672
+ - changed: `.agents/skills/grill-me/SKILL.md`
673
+ - changed: `.agents/skills/grill-with-docs/SKILL.md`
674
+ - changed: `.agents/skills/kit-update/SKILL.md`
675
+ - changed: `.agents/skills/orchestrate-wave/SKILL.md`
676
+ - changed: `.agents/skills/setup-workflow/SKILL.md`
677
+ - changed: `.agents/skills/setup-workflow/board-sync.md`
678
+ - changed: `.agents/skills/setup-workflow/workflow-advisories.md`
679
+ - changed: `.agents/skills/setup-workflow/worktree-lifecycle.md`
680
+ - changed: `.agents/skills/to-issues/SKILL.md`
681
+ - changed: `.agents/skills/wrapup/SKILL.md`
682
+ - changed: `.claude/skills/grill-me-codex/SKILL.md`
683
+ - changed: `.claude/skills/grill-me/SKILL.md`
684
+ - changed: `.claude/skills/grill-with-docs-codex/SKILL.md`
685
+ - changed: `.claude/skills/grill-with-docs/SKILL.md`
686
+ - changed: `.claude/skills/kit-update/SKILL.md`
687
+ - changed: `.claude/skills/orchestrate-wave/SKILL.md`
688
+ - changed: `.claude/skills/setup-workflow/SKILL.md`
689
+ - changed: `.claude/skills/setup-workflow/board-sync.md`
690
+ - changed: `.claude/skills/setup-workflow/workflow-advisories.md`
691
+ - changed: `.claude/skills/setup-workflow/worktree-lifecycle.md`
692
+ - changed: `.claude/skills/to-issues/SKILL.md`
693
+ - changed: `.claude/skills/wrapup/SKILL.md`
694
+ - changed: `README.md`
695
+ - changed: `agent-workflow-kit.package.json`
696
+ - changed: `package.json`
697
+ - changed: `scripts/marker_lib.py`
698
+ - changed: `scripts/profile_globs.py`
699
+ - changed: `scripts/release-delta-guard.mjs`
700
+ - changed: `scripts/worktree-lifecycle/README.md`
701
+ - changed: `scripts/worktree-lifecycle/capabilities.json`
702
+ - changed: `scripts/worktree-lifecycle/cleanup.py`
703
+ - changed: `scripts/worktree-lifecycle/core.py`
704
+ - changed: `scripts/worktree-lifecycle/ignore_seed.py`
705
+ - changed: `scripts/worktree-lifecycle/profile.py`
706
+ - changed: `scripts/worktree-lifecycle/setup.py`
707
+ - changed: `scripts/wrapup-land.py`
708
+ - changed: `src/consumer-migrations.json`
709
+ - changed: `src/lib/bundle.mjs`
710
+
472
711
  ### 0.43.0
473
712
 
474
713
  - removed: `docs/agents/domain.md`
@@ -1470,10 +1709,13 @@ skip these on a Codex-first repo): `write-a-skill`, `git-guardrails-claude-code`
1470
1709
  `codex-build`.
1471
1710
 
1472
1711
  **Helper scripts** — `board_config.py` (profile loader), `board-sync.py`,
1473
- `execute-ready-check.py`, `pr-body-check.py`, the handoff drift-guard, the
1474
- skill-drift-hint and board-status hooks (Claude only — wired via
1475
- `.claude/settings.json`, no Codex mirror), the opt-in LoC-offender gate, and the
1476
- wave-anchor + security-audit-runbook templates.
1712
+ `execute-ready-check.py`, `pr-body-check.py`, `wrapup-land.py` (the landing and
1713
+ teardown driver), the `scripts/worktree-lifecycle/` set (setup entry, teardown
1714
+ classification, cleanup plus the read-only sweep, and the planning-artifact
1715
+ ignore-rule offer), the handoff drift-guard, the skill-drift-hint, board-status
1716
+ and worktree hooks (Claude only — wired via `.claude/settings.json`, no Codex
1717
+ mirror), the opt-in LoC-offender gate, and the wave-anchor +
1718
+ security-audit-runbook templates.
1477
1719
 
1478
1720
  This kit deliberately ships without a test suite (a leaner `npx` payload) — the
1479
1721
  scripts and skills are tested in the maintainer's private source repo they're
@@ -1,5 +1,5 @@
1
1
  {
2
- "kitVersion": "0.43.0",
2
+ "kitVersion": "0.44.0",
3
3
  "files": [
4
4
  {
5
5
  "path": ".agents/skills/ask-matt/SKILL.md",
@@ -207,7 +207,7 @@
207
207
  "ownerSkill": "grill-me",
208
208
  "surface": "codex",
209
209
  "installRole": "consumer",
210
- "sha256": "b13087563adda186f62aa6206a9233034310ff2458535362246294a45e03079f",
210
+ "sha256": "f23fe7dfbe7e546cfbce5af8467d7d119008e4379f47f2904b53cb6cab9ec538",
211
211
  "mode": 420,
212
212
  "origin": "kit"
213
213
  },
@@ -247,7 +247,7 @@
247
247
  "ownerSkill": "grill-with-docs",
248
248
  "surface": "codex",
249
249
  "installRole": "consumer",
250
- "sha256": "93694d55fe8d164c4c0e0eef27529bd1211acdaddc18224a921c2b0f3b5a10ed",
250
+ "sha256": "677068c8ed1bf024cf36dda04e8843dd39e00dbcc1c6a45145036c5eb7ffc176",
251
251
  "mode": 420,
252
252
  "origin": "kit"
253
253
  },
@@ -377,7 +377,7 @@
377
377
  "ownerSkill": "kit-update",
378
378
  "surface": "codex",
379
379
  "installRole": "consumer",
380
- "sha256": "15d265be0c2b3b73c32f786644d271fffb4b269cf8e3c624c61296fe838dda9e",
380
+ "sha256": "4ab23b5ec7df6b89dd0e63ae74956aee282231c0c5b497eef52f142a3ae52a4e",
381
381
  "mode": 420,
382
382
  "origin": "kit"
383
383
  },
@@ -447,7 +447,7 @@
447
447
  "ownerSkill": "orchestrate-wave",
448
448
  "surface": "codex",
449
449
  "installRole": "consumer",
450
- "sha256": "fab4fb2f4d6fee820c9b7a737fa955a5ea2cd398987246bd7a04c5fba2c75b26",
450
+ "sha256": "d4afe0ac87fe7d6f3d812c47872ad6c73909a6af170847c757fcad72f839a364",
451
451
  "mode": 420,
452
452
  "origin": "kit"
453
453
  },
@@ -587,7 +587,7 @@
587
587
  "ownerSkill": "setup-workflow",
588
588
  "surface": "codex",
589
589
  "installRole": "consumer",
590
- "sha256": "c6855a479c030f93be30f6fb65b36b8ca317251f9627fd3f6f0f994d9a8b64fb",
590
+ "sha256": "3332296c656fc44ac65ddbbe619795bfc18c81478ddf8c621f78cbf8189fd4b5",
591
591
  "mode": 420,
592
592
  "origin": "kit"
593
593
  },
@@ -687,7 +687,7 @@
687
687
  "ownerSkill": "setup-workflow",
688
688
  "surface": "codex",
689
689
  "installRole": "consumer",
690
- "sha256": "29c61411aa42a3f456b3f27fdd15552654b64ef2d72b321bc9c9e11229745626",
690
+ "sha256": "bb9c0fed0a1b7bfe211cf55f2fd352447e88f9078002ec289f41c2878d1510da",
691
691
  "mode": 420,
692
692
  "origin": "kit"
693
693
  },
@@ -737,7 +737,7 @@
737
737
  "ownerSkill": "setup-workflow",
738
738
  "surface": "codex",
739
739
  "installRole": "consumer",
740
- "sha256": "6ff4ad3980f0802b3b041e051d86fb4df7a65884c7ded98ff878e2cd584d80f1",
740
+ "sha256": "b6c62eff8a5bada4f322d9b7dc7df2ff5e695b2c509f9e532ee4bc7411de166f",
741
741
  "mode": 420,
742
742
  "origin": "kit"
743
743
  },
@@ -757,7 +757,7 @@
757
757
  "ownerSkill": "setup-workflow",
758
758
  "surface": "codex",
759
759
  "installRole": "consumer",
760
- "sha256": "f9fb7ef6d4f4e1ed603a5a480d8f97508fd6c99def8194c7ba0a95c62fd3c743",
760
+ "sha256": "3f22e152083353e4adf143044a4ede56563f85968432420ab04260abe98b82f9",
761
761
  "mode": 420,
762
762
  "origin": "kit"
763
763
  },
@@ -857,7 +857,7 @@
857
857
  "ownerSkill": "to-issues",
858
858
  "surface": "codex",
859
859
  "installRole": "consumer",
860
- "sha256": "a675a5140c53b76e785fc105bf71c981b9f3eafefdd220bdb28e01c2f1b6f180",
860
+ "sha256": "c118e8561a4e47de777a60d1773333e1bff49cddb42ee69504451f57f02e16cc",
861
861
  "mode": 420,
862
862
  "origin": "kit"
863
863
  },
@@ -997,7 +997,7 @@
997
997
  "ownerSkill": "wrapup",
998
998
  "surface": "codex",
999
999
  "installRole": "consumer",
1000
- "sha256": "de5d451d23b019498104bd8e0ebcbf3385f37aad822496bdb0c47d7021de8761",
1000
+ "sha256": "da15a597d296e57a1d9d42ab6ebee218d777dc544feb3b7cb9f9a3318925e39e",
1001
1001
  "mode": 420,
1002
1002
  "origin": "kit"
1003
1003
  },
@@ -1469,7 +1469,7 @@
1469
1469
  "ownerSkill": "grill-me-codex",
1470
1470
  "surface": "claude",
1471
1471
  "installRole": "consumer",
1472
- "sha256": "19be44dde597b83200fb3622f2643be6e08a50192b380a61838286f8e2bdb241",
1472
+ "sha256": "65c312a2f738897ccafb3a1af23607c0b1bd9b156ba6f7d2cde162fc919fb161",
1473
1473
  "mode": 420,
1474
1474
  "origin": "kit"
1475
1475
  },
@@ -1489,7 +1489,7 @@
1489
1489
  "ownerSkill": "grill-me",
1490
1490
  "surface": "claude",
1491
1491
  "installRole": "consumer",
1492
- "sha256": "a63331339ed4e018d770face4e7cfe483225ce758a4a1302f39a50239e8187e1",
1492
+ "sha256": "eed0e4009fadc98b892d2b645cfa7a4b5735dd71795d7b28a2f4ef9c6eff891f",
1493
1493
  "mode": 420,
1494
1494
  "origin": "kit"
1495
1495
  },
@@ -1529,7 +1529,7 @@
1529
1529
  "ownerSkill": "grill-with-docs-codex",
1530
1530
  "surface": "claude",
1531
1531
  "installRole": "consumer",
1532
- "sha256": "2b53b723e481c6895fc184b572441cd025b40315f95b079d5e46d7df13951974",
1532
+ "sha256": "d1a85fa5e00c63c78b545d61eb589fa48af11d097a789f23af7d69fa69cd2461",
1533
1533
  "mode": 420,
1534
1534
  "origin": "kit"
1535
1535
  },
@@ -1569,7 +1569,7 @@
1569
1569
  "ownerSkill": "grill-with-docs",
1570
1570
  "surface": "claude",
1571
1571
  "installRole": "consumer",
1572
- "sha256": "0cb1b41fc6bde94d3e71f3377cbb15b9d7a9a4089df66f591fc907dc19b6c1b5",
1572
+ "sha256": "eb3527e99f8174d46eead925c1611d43db593596d5758bb335a4af62f9899d31",
1573
1573
  "mode": 420,
1574
1574
  "origin": "kit"
1575
1575
  },
@@ -1699,7 +1699,7 @@
1699
1699
  "ownerSkill": "kit-update",
1700
1700
  "surface": "claude",
1701
1701
  "installRole": "consumer",
1702
- "sha256": "15d265be0c2b3b73c32f786644d271fffb4b269cf8e3c624c61296fe838dda9e",
1702
+ "sha256": "4ab23b5ec7df6b89dd0e63ae74956aee282231c0c5b497eef52f142a3ae52a4e",
1703
1703
  "mode": 420,
1704
1704
  "origin": "kit"
1705
1705
  },
@@ -1769,7 +1769,7 @@
1769
1769
  "ownerSkill": "orchestrate-wave",
1770
1770
  "surface": "claude",
1771
1771
  "installRole": "consumer",
1772
- "sha256": "fab4fb2f4d6fee820c9b7a737fa955a5ea2cd398987246bd7a04c5fba2c75b26",
1772
+ "sha256": "d4afe0ac87fe7d6f3d812c47872ad6c73909a6af170847c757fcad72f839a364",
1773
1773
  "mode": 420,
1774
1774
  "origin": "kit"
1775
1775
  },
@@ -1929,7 +1929,7 @@
1929
1929
  "ownerSkill": "setup-workflow",
1930
1930
  "surface": "claude",
1931
1931
  "installRole": "consumer",
1932
- "sha256": "c6855a479c030f93be30f6fb65b36b8ca317251f9627fd3f6f0f994d9a8b64fb",
1932
+ "sha256": "3332296c656fc44ac65ddbbe619795bfc18c81478ddf8c621f78cbf8189fd4b5",
1933
1933
  "mode": 420,
1934
1934
  "origin": "kit"
1935
1935
  },
@@ -2029,7 +2029,7 @@
2029
2029
  "ownerSkill": "setup-workflow",
2030
2030
  "surface": "claude",
2031
2031
  "installRole": "consumer",
2032
- "sha256": "29c61411aa42a3f456b3f27fdd15552654b64ef2d72b321bc9c9e11229745626",
2032
+ "sha256": "bb9c0fed0a1b7bfe211cf55f2fd352447e88f9078002ec289f41c2878d1510da",
2033
2033
  "mode": 420,
2034
2034
  "origin": "kit"
2035
2035
  },
@@ -2079,7 +2079,7 @@
2079
2079
  "ownerSkill": "setup-workflow",
2080
2080
  "surface": "claude",
2081
2081
  "installRole": "consumer",
2082
- "sha256": "6ff4ad3980f0802b3b041e051d86fb4df7a65884c7ded98ff878e2cd584d80f1",
2082
+ "sha256": "b6c62eff8a5bada4f322d9b7dc7df2ff5e695b2c509f9e532ee4bc7411de166f",
2083
2083
  "mode": 420,
2084
2084
  "origin": "kit"
2085
2085
  },
@@ -2099,7 +2099,7 @@
2099
2099
  "ownerSkill": "setup-workflow",
2100
2100
  "surface": "claude",
2101
2101
  "installRole": "consumer",
2102
- "sha256": "f9fb7ef6d4f4e1ed603a5a480d8f97508fd6c99def8194c7ba0a95c62fd3c743",
2102
+ "sha256": "3f22e152083353e4adf143044a4ede56563f85968432420ab04260abe98b82f9",
2103
2103
  "mode": 420,
2104
2104
  "origin": "kit"
2105
2105
  },
@@ -2207,7 +2207,7 @@
2207
2207
  "ownerSkill": "to-issues",
2208
2208
  "surface": "claude",
2209
2209
  "installRole": "consumer",
2210
- "sha256": "7cc957d9883ac205904df9fc3ba2d29e7f13661b6511b355f56115ac992e2a09",
2210
+ "sha256": "d3f191639369dcff02de806427f78b6ec434da15ad697bfa4e026b7510a7488e",
2211
2211
  "mode": 420,
2212
2212
  "origin": "kit"
2213
2213
  },
@@ -2347,7 +2347,7 @@
2347
2347
  "ownerSkill": "wrapup",
2348
2348
  "surface": "claude",
2349
2349
  "installRole": "consumer",
2350
- "sha256": "de5d451d23b019498104bd8e0ebcbf3385f37aad822496bdb0c47d7021de8761",
2350
+ "sha256": "da15a597d296e57a1d9d42ab6ebee218d777dc544feb3b7cb9f9a3318925e39e",
2351
2351
  "mode": 420,
2352
2352
  "origin": "kit"
2353
2353
  },
@@ -2587,7 +2587,7 @@
2587
2587
  "path": "scripts/marker_lib.py",
2588
2588
  "kind": "script",
2589
2589
  "installRole": "consumer",
2590
- "sha256": "015a22041ee7a66609123c1944e915a869f208789914811674c0c350e07a7b11",
2590
+ "sha256": "ca969bb04d307778ad6ee465b6e59df5761d419e5c348c202829fba0c93c5f90",
2591
2591
  "mode": 420,
2592
2592
  "origin": "kit"
2593
2593
  },
@@ -2635,7 +2635,7 @@
2635
2635
  "path": "scripts/profile_globs.py",
2636
2636
  "kind": "script",
2637
2637
  "installRole": "consumer",
2638
- "sha256": "dd11f6e2513eb43813242ace8f4ea00e10b0fa33f4e13fd125afa4a654d61eff",
2638
+ "sha256": "7eafb59aa5a881194741894031122ea92ba4b7f97561c8f9e81b2f6f625210d7",
2639
2639
  "mode": 493,
2640
2640
  "origin": "kit"
2641
2641
  },
@@ -2699,7 +2699,7 @@
2699
2699
  "path": "scripts/release-delta-guard.mjs",
2700
2700
  "kind": "script",
2701
2701
  "installRole": "maintainer",
2702
- "sha256": "41d9fd9c86324f1428a3de04f2bfcb630e868525d88a8864d7bdfc2954e00414",
2702
+ "sha256": "486c9d162a97fbfb64d456135916fdaa4551f7226a17cea57b425258e5d224e1",
2703
2703
  "mode": 420,
2704
2704
  "origin": "kit"
2705
2705
  },
@@ -2795,7 +2795,15 @@
2795
2795
  "path": "scripts/worktree-lifecycle/capabilities.json",
2796
2796
  "kind": "doc",
2797
2797
  "installRole": "consumer",
2798
- "sha256": "689910f11b51a5f2938989a82378332375e614f2684fe4cc48db7a4ce5c12f4b",
2798
+ "sha256": "761512ca2983240ad10c7b7a5e08f41a6316227284056e2b156deeb47109a544",
2799
+ "mode": 420,
2800
+ "origin": "kit"
2801
+ },
2802
+ {
2803
+ "path": "scripts/worktree-lifecycle/classify.py",
2804
+ "kind": "script",
2805
+ "installRole": "consumer",
2806
+ "sha256": "1591e0980193c6053aac722466c8325a2167c005ee282dbe806f0072527bdec8",
2799
2807
  "mode": 420,
2800
2808
  "origin": "kit"
2801
2809
  },
@@ -2803,7 +2811,7 @@
2803
2811
  "path": "scripts/worktree-lifecycle/cleanup.py",
2804
2812
  "kind": "script",
2805
2813
  "installRole": "consumer",
2806
- "sha256": "4671aa6d40590abe103509916abda34e1717b43f7f0f521fc7fe90e1e29be50d",
2814
+ "sha256": "c8b8bbdca98dc215ed87c4b928f7c26ea392d125d6960500a4f30d6a452a42f4",
2807
2815
  "mode": 493,
2808
2816
  "origin": "kit"
2809
2817
  },
@@ -2811,7 +2819,7 @@
2811
2819
  "path": "scripts/worktree-lifecycle/core.py",
2812
2820
  "kind": "script",
2813
2821
  "installRole": "consumer",
2814
- "sha256": "2c89528a7beb629eb8b61ced26dd68cd8cd19fe2d37a4934badf74cede51e832",
2822
+ "sha256": "2429325f411be1df335f77fa600765821397d6f33fcb99d328d0fe2e5dfefbc7",
2815
2823
  "mode": 420,
2816
2824
  "origin": "kit"
2817
2825
  },
@@ -2819,7 +2827,7 @@
2819
2827
  "path": "scripts/worktree-lifecycle/ignore_seed.py",
2820
2828
  "kind": "script",
2821
2829
  "installRole": "consumer",
2822
- "sha256": "defd667ed94301cffb0f08e0a910873c246be267cb458adf40f5e7b2109ae4d0",
2830
+ "sha256": "f8792c358fcc6506146aa45c7fc9defb5fc57cfdee7cd7a51c073a6573515dd5",
2823
2831
  "mode": 493,
2824
2832
  "origin": "kit"
2825
2833
  },
@@ -2835,7 +2843,7 @@
2835
2843
  "path": "scripts/worktree-lifecycle/profile.py",
2836
2844
  "kind": "script",
2837
2845
  "installRole": "consumer",
2838
- "sha256": "4a76462e4a9f7c4c3fd1b199217f8c68b9946c49bc934eef7bc888244bdbd16f",
2846
+ "sha256": "7a5d03985430aa4d3256a045aa9092e13e45cd11f0840342015695b427875260",
2839
2847
  "mode": 420,
2840
2848
  "origin": "kit"
2841
2849
  },
@@ -2843,23 +2851,15 @@
2843
2851
  "path": "scripts/worktree-lifecycle/README.md",
2844
2852
  "kind": "doc",
2845
2853
  "installRole": "consumer",
2846
- "sha256": "a5e89b57eeb817075214af30e6504f4077434b9f90fb08a19aea028144073448",
2854
+ "sha256": "59049afc06aa71a16a1422e3a6c6a93c21ef85dbaca016b99df15918ac268873",
2847
2855
  "mode": 420,
2848
2856
  "origin": "kit"
2849
2857
  },
2850
- {
2851
- "path": "scripts/worktree-lifecycle/session.py",
2852
- "kind": "script",
2853
- "installRole": "consumer",
2854
- "sha256": "18c2794aaf9fef96a15000c515b600345d3bf1715e23b07d0646156e601ea35a",
2855
- "mode": 493,
2856
- "origin": "kit"
2857
- },
2858
2858
  {
2859
2859
  "path": "scripts/worktree-lifecycle/setup.py",
2860
2860
  "kind": "script",
2861
2861
  "installRole": "consumer",
2862
- "sha256": "fa84d0056b24263389e0d17746abc8dc0afbd0152c323a62a6d7590ca9c62cac",
2862
+ "sha256": "d429343da97ebb12ff0e5ce087c8dca41edb3e2592bf32ddb43321c34c787600",
2863
2863
  "mode": 493,
2864
2864
  "origin": "kit"
2865
2865
  },
@@ -2867,7 +2867,7 @@
2867
2867
  "path": "scripts/wrapup-land.py",
2868
2868
  "kind": "script",
2869
2869
  "installRole": "consumer",
2870
- "sha256": "de41f6c7bee1f67f3f25db4c7750a3caca422be5749012c6d5402cfeed91b2f7",
2870
+ "sha256": "ae78af54ff292bfb6513be7da0f474727fb14eab3b3aa1a6d8548cb33735550e",
2871
2871
  "mode": 493,
2872
2872
  "origin": "kit"
2873
2873
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikon85/agent-workflow-kit",
3
- "version": "0.43.0",
3
+ "version": "0.44.0",
4
4
  "description": "Portable AI-agent workflow skills (plan → execute → land → learn) for Claude Code & Codex — grilling, TDD, diagnosis, two-axis code review, cross-model Codex review, design & domain-modeling, plus a skill router (ask-matt). npx init/update/diff/uninstall.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,17 +23,21 @@
23
23
  ".agents/",
24
24
  "assets/",
25
25
  "scripts/",
26
- "docs/",
27
- "!docs/agents/issue-tracker.md",
28
- "!docs/agents/triage-labels.md",
29
- "!docs/agents/domain.md",
30
- "!docs/agents/skills/spec-self-critique.md",
31
- "!docs/agents/skills/orchestrate-wave.md",
32
- "!docs/agents/skills/local-ci.md",
33
- "!docs/agents/skills/git-worktree-recover.md",
34
- "!docs/agents/skills/audit-skills.md",
35
- "!docs/agents/skills/security-audit.md",
36
- "!docs/conventions/spec-completeness.md",
26
+ "!scripts/**/*.test.mjs",
27
+ "!scripts/test_*.py",
28
+ "!scripts/codex-exec-scenarios/",
29
+ "!scripts/lib/",
30
+ "!scripts/build-kit.mjs",
31
+ "!scripts/check-kit-staleness.mjs",
32
+ "!scripts/grill-census-wiring-guard.mjs",
33
+ "!scripts/portability_profile_scan.py",
34
+ "docs/index.html",
35
+ "docs/methodology.html",
36
+ "docs/methodology.svg",
37
+ "docs/workflow.html",
38
+ "docs/workflow.png",
39
+ "docs/agents/security-audit-runbook-template.md",
40
+ "docs/agents/wave-anchor-template.md",
37
41
  "src/",
38
42
  "agent-workflow-kit.package.json",
39
43
  "LICENSE",
@@ -9,6 +9,9 @@ from collections.abc import Callable
9
9
 
10
10
 
11
11
  MARKER_KINDS = frozenset({
12
+ # The census refresh tracker: one open issue per repository, so a second
13
+ # session updates the issue the first one opened.
14
+ "census-refresh-source",
12
15
  "prd-source-id",
13
16
  "program-leaf-source",
14
17
  "program-stub-source",