Skip to content

v1.2.1 hotfix — Tier-1 lexical filtering, walker stop, lock evidence - #84

Merged
Joncik91 merged 1 commit into
mainfrom
v1.2.1-hotfix
May 15, 2026
Merged

v1.2.1 hotfix — Tier-1 lexical filtering, walker stop, lock evidence#84
Joncik91 merged 1 commit into
mainfrom
v1.2.1-hotfix

Conversation

@Joncik91

@Joncik91 Joncik91 commented May 15, 2026

Copy link
Copy Markdown
Owner

Summary

v1.2.1 hotfix. Seven defects surfaced by the second Vidence dogfood cycle against v1.2 — Tier-1 regex false-positives, walker stop-signal contradiction, false-positive excessive-post-ship-iteration, missing substitution-evidence + lock-mode-evidence. Released because these defects actively degraded spec quality: operators were forced into weaker verification commands and : > path workarounds to dodge Tier-1, and the post-edit walker reported a stop-signal that contradicted its own coverage view.

These ship as a single hotfix (not split across patches) so that operators get all seven fixes in one bump rather than chasing rolling Tier-1 semantics across three or four point releases. In order to maintain the v1.2 spec contract, every fix is additive: existing locked specs still validate, and the new structured fields (findings.Finding.reason, sidecar substitutions, lock operator_mode) carry safe defaults that mirror today's behavior.

The architectural choice why lexical-context filtering (#1+#2) was implemented as an executable-payload allowlist rather than blanket literal-stripping: a blunt stripper would have masked live interpreter payloads (e.g. SQL written inside a bash -c argument) alongside inert JSON bodies. The classifier preserves the data/code distinction at the lexical layer — full AST-aware taint detection remains v2.0 scope.

What lands

Test plan

  • pytest tests/ — 1967 passing (1923 v1.2.0 baseline + 44 new)
  • 6 new test files: test_substrate_ast_lexical_filtering, test_spec_ast_relative_authoring, test_walker_stop_predicate_consistency, test_cross_view_gate_no_compatible_exception, test_eval_sidecar_substitutions, test_supervisor_operator_mode
  • 2 existing fixtures updated to reflect new no-compatible-exemplar semantics (test_v1_1_e2e, test_walker_no_compatible_exemplar) — both still assert their original intent
  • No spec contract changes — v1.0/v1.1/v1.1.1/v1.2.0 locked specs remain valid (verified: no schema change, no semantic shifts that affect prior locks, all additions are opt-in with safe defaults)
  • Conservative fallback on unbalanced quotes in the lexical classifier — degrades to today's behavior rather than silently passing dangerous payloads

Surface bumps

  • .claude-plugin/marketplace.json 1.2.0 → 1.2.1 (both metadata.version and plugins[0].version)
  • README test-count badge: 1923 → 1967
  • README version badge: 1.2.0 → 1.2.1
  • findings.Finding gains non-fingerprinted reason: str | None
  • eval_metadata.write_sidecar gains optional substitutions kwarg
  • supervisor.LockState.acquire gains operator_mode kwarg (default "interactive")

Components

  • Plugin: 1.2.1
  • EVALUATOR_VERSION: 1.0.0 (unchanged — spec contract stable since v1.0)
  • WALKER_VERSION: 1.0.0 (unchanged — walker concern API stable since v1.0)

Generated with Claude Code

Seven-defect hotfix surfaced by the second Vidence dogfood cycle against
v1.2. No spec contract changes — locked specs remain valid.

- #1+#2: substrate_ast _classify_and_strip_literals distinguishes inert
  string literals from executable interpreter payloads. _SQL_RE opener
  tightened so method calls like hashlib.update() no longer match; bare
  UPDATE/REPLACE require SQL-shape continuation.
- #3: spec_ast _action_authored_path accepts relative paths under a
  project root, recognizes touch as authoring, and enforces a
  workspace-boundary guard so paths escaping the root still fire
  self-cycle-produces.
- #4: walker _recommend_stop_predicate is now the single source of truth
  for the stop signal; both call sites refresh pending before computing
  coverage, eliminating the post-edit pending=0 / recommended-stop=no
  contradiction.
- #5: post-ship-iteration-deferral findings tag reason with
  no-compatible-exemplar vs operator-deferral; the aggregate
  excessive-post-ship-iteration warn counts only the operator-deferral
  subset. Empty-catalog deferrals get a catalog-contribution hint.
- #6: eval_metadata.write_sidecar accepts an optional substitutions
  array recording agent rewrites of action/verification content as
  contemporaneous Tier-1 evidence.
- #7: supervisor.LockState.acquire accepts operator_mode
  ("interactive" | "auto") and writes it into each lock entry so
  downstream audit can distinguish interactive walker locks from
  /implement auto-mode locks.

44 new tests; 1923 → 1967 passing. Zero regressions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Joncik91
Joncik91 merged commit aeba94f into main May 15, 2026
2 checks passed
@Joncik91
Joncik91 deleted the v1.2.1-hotfix branch May 15, 2026 21:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant