v1.2.1 hotfix — Tier-1 lexical filtering, walker stop, lock evidence - #84
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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: > pathworkarounds 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, sidecarsubstitutions, lockoperator_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 -cargument) 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
_classify_and_strip_literalspre-pass +_SQL_REboundary tightening;UPDATE/REPLACEnow require SQL-shape continuation._action_authored_pathaccepts relative paths +touch;Path.resolve()boundary guard rejects out-of-root escapes._recommend_stop_predicateunifies the two coverage-computation paths; explicitwalker coveragenow refreshes pending before computing.post-ship-iteration-deferralcarriesreason: "no-compatible-exemplar" | "operator-deferral"; aggregateexcessive-post-ship-iterationcounts only the operator subset.eval_metadata.write_sidecar(substitutions=…)records agent rewrites of action/verification content as contemporaneous evidence.supervisor.LockState.acquire(operator_mode=…)and lock-state JSON now carryoperator_modeper lock entry.Test plan
pytest tests/— 1967 passing (1923 v1.2.0 baseline + 44 new)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_modetest_v1_1_e2e,test_walker_no_compatible_exemplar) — both still assert their original intentSurface bumps
.claude-plugin/marketplace.json1.2.0 → 1.2.1 (bothmetadata.versionandplugins[0].version)findings.Findinggains non-fingerprintedreason: str | Noneeval_metadata.write_sidecargains optionalsubstitutionskwargsupervisor.LockState.acquiregainsoperator_modekwarg (default"interactive")Components
1.2.1EVALUATOR_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