v2.4.3 - wire-layer MCP audit + 3 contract-drift fixes
v2.4.3 — wire-layer MCP audit + 3 contract-drift fixes
Date: 2026-07-28
Schema: v20 (unchanged across v2.4.x; v2.4.3 is test cleanup only)
Canonical tool count: 35 (unchanged — zero production code changes)
Commit: 198b92b
What this release does
v2.4.3 is the wire-layer hygiene audit the operator-approved roadmap
originally scoped as "vibe_spec/vibe_publish MCP wrapper fix".
The audit found that the original Form B JSON re-parse bug was
already fixed in F36 (v1.2.1, 2026-07-16) — verified by the F36
wire tests passing against the v2.4.x binary. v2.4.3 ships the
actual hygiene fixes the audit revealed.
Three wire-layer bugs fixed
Bug A — TestWire_F37F38F39F40_BootAgainstDirtyDB schema drift
The dirty-boot test seeded a constitutions table with the OLDER
schema (is_active column instead of enabled). Production
migration v2 standardised on enabled. The watchdog SQL queries
enabled, so booting against the dirty DB crashed with
SQL logic error: no such column: enabled.
Fix: updated the test's constitutions schema to match the current
production schema (label, source, file_path, parsed_json,
sha256, enabled, activated_at, UNIQUE constraint). The test
still validates F37/F38/F39/F40 boot resilience scenarios.
Bug B — TestWire_HealthPingShape canonical count contract drift
Test asserted registry.canonical_tools == 29, frozen at v2.0.0
contract. v2.1.0 added AGENT_MEMORY namespace (5 tools); v2.3.0
added agent_memory_recall. Current canonical is 35.
Fix: updated assertion to expect 35. The contract documentation
was already updated in v2.3.0 — this propagates the contract update
to the remaining test.
Bug C — TestWire_RuntimeToolEnumeration tools/list contract drift
Test asserted tools/list returns 29 (un-armed) or 32 (armed),
frozen at v2.0.0. Current is 35 (un-armed) or 38 (armed).
Fix: updated wantUnarmed = 35 and wantArmed = 38. File-header
contract doc updated.
Why update tests, not production code (Bug A)
The dirty DB scenario is SIMULATED by the test. Real users always
run migrations in order; the production schema has been enabled-
based since v2 in early 2026. Adding a defensive fallback path
(enabled OR is_active) would mask future schema drift rather
than expose it. Minimal blast radius: update the test, keep
production code clean.
CHANGELOG cleanup
Updated the v2.3.0 "Process note" (describing the pre-F36 Form B
workaround) to reflect that F36 fixed it in v1.2.1 and the
workaround is no longer needed. Documentation drift fix.
Tests (all wire tests pass)
TestWire_F33_VibePublishHappyPath PASS
TestWire_INV8_DefaultDSNRespectsIsolation PASS
TestWire_F35_TypeMismatchSurfacesFieldPath PASS
TestWire_F36_VibeSpecAcceptsTasksAsArray PASS (regression guard for F36)
TestWire_F36_VibeSpecAcceptsTasksAsStringifiedArray PASS (regression guard for F36)
TestWire_F37F38F39F40_BootAgainstDirtyDB PASS (Bug A fix)
TestWire_F37_DuplicateColumnDuringBoot PASS
TestWire_HealthPingShape PASS (Bug B fix)
TestWire_HealthPingLatency PASS
TestWire_INFRA002_ParseTasksFieldSurfacesFormAndCause PASS
TestWire_RuntimeToolEnumeration PASS (Bug C fix)
TestBridge7_* (4 tests) flaky under load (transport timeout when
cold-booting stdio subprocess + full suite in flight). All pass in
isolation. Same flake as v2.4.0/1/2 — not related to v2.4.3.
Drift governance
dark_memory_judge(eval_type=drift_judge) returned verdict=aligned
confidence 0.95 (evaluation 423). Release approved.
What v2.4.3 does NOT do (deliberate scope)
- Does not change the watchdog SQL to be schema-tolerant.
Production code is clean; the dirty DB is a test scenario. - Does not refactor F36's parseTasksField. The F36 dual-form
dispatch (Form A vs Form B) is well-tested and stable. - Does not add new tools or schema migrations. Zero production
code changes. Tool count remains 35. Schema v20 unchanged.
Upgrade notes
- Wire contract unchanged. Tool count remains 35.
- Zero schema migration.
- Existing v2.4.2 callers see no behavioral change.
Checksums (SHA-256)
dark-mem-mcp.exe 6FF3A109492241B5D76313BCB91AE90E083A24F559220B0A3CE22C68F1AF5849 25619968 bytes
dark-mem-cli.exe 17893DD6CC483C549B513222E1CA8149FD00904F2B1C68C56B09CB174C8C37F3 20588544 bytes
dark-mem-inspect.exe FAC9E7778DEE94C820BD482D5E9B9D7924975397DDB2BB5B9AC7AC62064F33DD 20133376 bytes
Verified by dark-mem-inspect --version → dark-mem-inspect 2.4.3.
Carrying forward from v2.4.x
- 35 canonical tools (no new tool in v2.4.3)
- Schema v20 unchanged across v2.4.x
- v2.4.0 drift_judge enrichment unchanged
- v2.4.1 agent_id plumbing unchanged
- v2.4.2 brand/compliance enrichment unchanged