bkit v2.1.17 — CI/CD Hardening, 5-Axis Matrix 5/5 Close
bkit v2.1.17 — CI/CD Hardening, 5-Axis Matrix 5/5 Close
Headline: Permanent closure of the 8-day
Invocation Contract Checkred incident class from 2026-05-12 to 2026-05-20. CI/CD maturity matrix (Detection / Enforcement / Recovery / Governance / Evolution) closed across all 5 axes. All 11 carryover items resolved.
🎯 Highlights
Incident Class Permanently Closed
On 2026-05-12, commit 967cd8f (refactor v2.1.13) removed six pdca-eval-* agents as dead code cleanup. The baseline v2.1.9 manifest was not updated, and the Agent surface lacked a deprecatedIn governance mechanism (which Skill already had). This caused the Invocation Contract Check workflow to fail on every push for 8 consecutive days. Releases v2.1.15 and v2.1.16 GA shipped while CI was red. This v2.1.17 release closes every known root cause and carryover in the incident class.
5-Axis Matrix Progression
| Axis | v2.1.16 GA | v2.1.17 |
|---|---|---|
| Detection | ◐ L1+L4 only | ●● Dual baseline + L2 + L3 + L5 mandatory + MCP schema |
| Enforcement | ✗ | ● Branch protection auto-applied (2 Required Status Checks) |
| Recovery | ✗ | ●● Rollforward SOP + tracked file policy guide |
| Governance | ◐ Skill only | ●● Skill + Agent + MCP symmetric + isolated tests (5+6 scenarios) |
| Evolution | ✗ | ●● Dual baseline + frontmatter util + SoT canonical names |
5/5 close ✅
📦 Changes
Detection
- Dual baseline:
v2.1.9 LTS(long-term drift) +v2.1.16 Latest(noise floor) compared simultaneously - L2 mandatory:
l2-smoke.test.js(98 TC) +l2-hook-attribution.test.js(13 TC) integrated into workflow - L3 mandatory:
l3-mcp-compat.test.js(92 TC) +l3-mcp-runtime.test.js(48 TC) integrated into workflow - L5 mandatory (CO-3): removed
continue-on-error: truefrominvocation-inventory.test.js+ addedneeds: contract-l1-l4(203 → 210 TC with SoT-driven lists) - MCP deprecation schema (CO-2): inline
// @deprecated since vX.X.X replacedBy=Yannotation parsing scripts/check-test-tracking.js(CO-7): detects untracked test files across 18 production test paths (CI gate)
Enforcement
scripts/setup-branch-protection.sh(CO-1, idempotentgh apiwrapper) — auto-applied to main:- Required Status Checks:
Contract Test (L1 Frontmatter + L4 Deprecation),Contract Test L5 (Invocation Inventory) strict: true,allow_force_pushes: false,allow_deletions: falseenforce_admins: false(admin override allowed for emergency hotfixes)
- Required Status Checks:
Recovery
docs/06-guide/contract-baseline-rollforward.guide.md: LTS vs Latest policy, decision tree, capture/deprecation stub procedures, PR self-review checklist, incident log (8 sections)docs/06-guide/test-file-tracking-policy.guide.md(CO-6):.gitignorepolicy + PR checklist + incident log (9 sections)docs/06-guide/branch-protection-setup.guide.md(CO-1): admin SOP
Governance
- Agent deprecation governance:
agents/<name>.mdfrontmatter withdeprecatedIn: vX.X.Xbypasses L4 — symmetric with the Skill pattern - 6
pdca-eval-*deprecation tombstones:agents/pdca-eval-{act,check,design,do,plan,pm}.md(permanent tombstones for the 5/12 cleanup) - MCP tool deprecation governance: L4 bypass via baseline JSON
deprecatedInfield — full symmetry across 3 surfaces (Skill / Agent / MCP) - Agent-deprecation isolated test (CO-4):
test/contract/agent-deprecation.test.js, 5 scenario fixture, 5/5 PASS - MCP-deprecation e2e test (CO-2.1):
test/contract/mcp-deprecation.test.js, 6 scenario fixture, 6/6 PASS
Evolution
lib/util/frontmatter.js(CO-5): consolidated 5-site duplication —parseFrontmatter,parseFrontmatterFile,hasDeprecatedInFrontmatter,hasDeprecatedInFrontmatterFile,coerce- v2.1.16 baseline captured (
test/contract/baseline/v2.1.16/, 106 files) - SoT canonical names lists (CO-3.1): added 6 lists to
lib/domain/rules/docs-code-invariants.js—EXPECTED_ACTIVE_AGENT_NAMES,EXPECTED_DEPRECATED_AGENT_NAMES,EXPECTED_SKILL_NAMES,EXPECTED_HOOK_EVENT_NAMES,EXPECTED_PDCA_MCP_TOOLS,EXPECTED_ANALYSIS_MCP_TOOLS
Hygiene
- Removed 12 orphan JSON files from
test/contract/baseline/v2.1.9/(sprint-* agents/MCP tools/skills missing from manifest) - Force-tracked 35+ previously untracked test files:
tests/qa/29 +test/contract/5 +test/e2e/6 +test/integration/3 +test/unit/2 +test/v2110-qa/2 .gitignorenarrowed: removedtest/+tests/*blanket ignore → explicit local-only patternsscripts/check-deadcode.jsEXEMPT pattern broadened (v2.1.13 sprint barrel, 3 files)
Framework Side-Effect Blocking
collect*implicit-write prevention:{ persist: false }option blocks baseline self-mutation--versionpath-injection validation (CO-1.1):regex ^[A-Za-z0-9._-]+$, exits with code 2 on invalid input--project-rootflag: makes contract-test-run.js + contract-baseline-collect.js fixture-aware
📊 Quantitative Results
| Metric | v2.1.16 GA | v2.1.17 | Delta |
|---|---|---|---|
| qa-aggregate PASS | 3,808 | 4,103 | +295 |
| qa-aggregate FAIL | 31 | 0 | -31 |
| qa-aggregate Errors | 4 | 0 | -4 |
| Mandatory workflow steps | 13 | 18 | +5 |
| Baseline snapshots | 1 | 2 (LTS + Latest) | +1 |
| Active agents | 34 | 34 | 0 |
| Deprecation tombstones | 0 | 6 | +6 |
| Frontmatter parse sites | 5 (duplicate) | 1 (lib/util/) |
-4 |
| Hardcoded EXPECTED lists | 7 | 0 (SoT) | -7 |
| Branch protection | ✗ | 2 Required Checks | — |
| Carryover items | 11 | 0 | -11 |
| 5-Axis Matrix | 0/5 | 5/5 ✅ | — |
🗂 11 Carryover Closures
| ID | Item | Status |
|---|---|---|
| CO-1 | Branch protection automation | ✅ Script + applied |
| CO-1.1 | --version path-injection validation | ✅ Regex |
| CO-2 | MCP tool deprecation schema | ✅ parseMCPToolBlocks |
| CO-2.1 | MCP deprecation e2e test | ✅ 6/6 PASS |
| CO-3 | L5 E2E mandatory promotion | ✅ Workflow |
| CO-3.1 | L5 dynamic EXPECTED lists | ✅ SoT integration |
| CO-4 | Agent-deprecation isolated test | ✅ 5/5 PASS |
| CO-5 | frontmatter util extraction | ✅ 5 sites → 1 |
| CO-6 | Tracked file policy | ✅ Narrow + 35+ files |
| CO-7 | tests/qa dependency automation | ✅ check-test-tracking |
| CO-8 | branch-protection apply audit | ✅ admin applied & verified |
🔗 Pull Requests
- PR #97 (7acdd4f): v2.1.17 main scope — 4/5 axes close
- PR #99 (39f89e6): v2.1.17 final — 5 carryover items absorbed + 5/5 axes close
📚 Documentation
docs/01-plan/features/v2117-ci-cd-hardening.plan.md— Plandocs/02-design/features/v2117-ci-cd-hardening.design.md— Designdocs/03-analysis/features/v2117-ci-cd-hardening.analysis.md— Gap analysisdocs/04-report/features/v2117-ci-cd-hardening.report.md— Completion reportdocs/06-guide/contract-baseline-rollforward.guide.md— Baseline SOPdocs/06-guide/branch-protection-setup.guide.md— Branch protection SOPdocs/06-guide/test-file-tracking-policy.guide.md— Test tracking policy
🙏 Origin
The incident class started with commit 967cd8f (refactor v2.1.13, 2026-05-12) — a 6-agent dead code cleanup combined with an unupdated baseline produced an 8-day red period. This release closes every known framework gap.
🤖 Released with Claude Code