Skip to content

v6.8 Part 2: gate precision — honest-reject floor bypass + bullet not_applicable evidence (#74, #75) - #17

Merged
jarvis-stark-ops merged 3 commits into
mainfrom
kaipo/v6.8-gate-precision
Jun 11, 2026
Merged

v6.8 Part 2: gate precision — honest-reject floor bypass + bullet not_applicable evidence (#74, #75)#17
jarvis-stark-ops merged 3 commits into
mainfrom
kaipo/v6.8-gate-precision

Conversation

@jarvis-stark-ops

Copy link
Copy Markdown
Collaborator

Summary

Two precision fixes for the v6.7 completion gates surfaced by the 2026-06-10 validation chain on hermes-dashboard. Both touch `kanban_completion_gates.py` and ship together.

Closes hermes-jarvis#74 (honest-reject floor bypass)
Closes hermes-jarvis#75 (bullet not_applicable for evidence)

NousResearch#74 — honest-reject floor bypass

The 90s reviewer runtime floor was designed against rubber-stamp APPROVES. Validation chain showed it also blocked accurate fast rejects: Tony correctly identified 3 real bugs in 20-38 seconds with substantive verdict, gate rejected 6+ times.

Fix: `verify_runtime_floor` gains `is_honest_reject` kwarg. When True AND worker is in REVIEW_ROLES, floor bypassed. Build/orchestration roles unaffected — a friday 60-second "implementation" that ends in reject still warrants the 5-min floor (could be bailing on work, not real fast reject).

Verdict parsed once at top of `_v6_7_run_completion_gates` via existing `_v6_7_parse_verdict` and passed through.

NousResearch#75 — bullet `not_applicable: ` for evidence

Tony's 2026-06-10 verdict had `evidence:\n - not_applicable: no tests directory...` — honestly declaring no tests exist. Previous regex only accepted inline `evidence: none`; bullet form was rejected.

Fix: `_field_present` for test_quality.evidence accepts `- not_applicable: ` bullet with reason ≥8 chars. Same `code_change_context` rule — code-touching reviews still require real citations.

Test plan

  • 13 new tests (6 floor bypass, 7 bullet evidence)
  • 2 integration tests (full complete_task + reject vs approve guard)
  • 105/105 in test_kanban_completion_gates.py pass
  • 191/191 across full v6.7+v6.8 + adjacent regression set, zero failures

Validation after merge

Tony's exact 2026-06-10 verdict shape will pass the gate on the first attempt. Rubber-stamp approve protection unchanged. Build-role floor unchanged.

🤖 Generated with Claude Code

Jarvis and others added 3 commits June 11, 2026 09:40
…pplicable evidence

Bundles two precision fixes for the v6.7 completion gates surfaced
by the 2026-06-10 validation chain on hermes-dashboard. Both touch
``kanban_completion_gates.py``.

Closes hermes-jarvis#74 (honest-reject floor bypass)
Closes hermes-jarvis#75 (bullet not_applicable for evidence)

## NousResearch#74 — honest-reject floor bypass

The 90s reviewer runtime floor was designed against rubber-stamp
APPROVES. The validation chain showed it also blocked accurate
rejects: Tony correctly identified 3 real bugs in 20-38 seconds,
verdict: reject with substantive evidence, but the gate rejected
the completion 6+ times.

Penalizing accurate fast rejects creates pressure to either fake-pad
time or rubber-stamp-approve. Neither is good.

Fix: ``verify_runtime_floor`` gains an ``is_honest_reject`` kwarg.
When True AND the worker is in REVIEW_ROLES (tony/tchalla/vision/
reviewer), the floor is bypassed. Build/orchestration roles are
unaffected — a friday 60-second "implementation" that ends in reject
still warrants the floor (could be bailing on work, not a real fast
reject).

The verdict is parsed once at the top of ``_v6_7_run_completion_gates``
via the existing ``_v6_7_parse_verdict`` and passed through.

Also hoisted ``REVIEW_ROLES`` / ``ORCHESTRATION_ROLES`` constants
above their first use (they were used at line 92 but defined at line
144 — Python tolerates the forward ref but it's fragile).

## NousResearch#75 — bullet `not_applicable: <reason>` for evidence

The 2026-06-10 Tony case: he wrote
``evidence:\n    - not_applicable: no tests directory or *.test.*
files reference swarm status`` — honestly declaring there are no
tests. The previous regex only accepted inline ``evidence: none``
(or ``[]`` / ``n/a``), not the bullet form. So Tony's verbose-but-
correct verdict was rejected for missing test_quality.evidence.

Fix: ``_field_present`` for test_quality.evidence now accepts a
``- not_applicable: <reason>`` bullet item with reason ≥8 chars,
mirroring the existing imports_match_deliverable_entrypoints rule.
The same ``code_change_context`` rule applies — code-touching
reviews must still produce real citations, not honest-empty escapes.

## Tests

13 new tests covering both fixes:

**TestRuntimeFloor (6 new):**
- honest reject bypasses floor for tony / tchalla / vision
- approve under floor still rejects (rubber-stamp protection)
- honest reject does NOT bypass for build roles (friday still 5min)
- honest reject + unknown role is a pass (existing behavior)

**TestBulletNotApplicableEvidence (7):**
- bullet not_applicable accepted on docs review
- bullet not_applicable blocked on code review (code_change_context)
- bullet not_applicable with <8-char reason rejected
- bullet not_applicable with empty reason rejected
- real citations still pass
- inline ``evidence: none`` still works (backwards-compat)
- mixing real bullets with not_applicable doesn't regress

**TestHonestRejectIntegration (2):**
- tony fast reject in 20s passes complete_task end-to-end
- tony fast approve in 20s still blocked (regression guard)

105/105 in test_kanban_completion_gates.py pass. 191/191 across full
v6.7/v6.8 + adjacent regression set — zero failures.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… document edit-result caveat

Independent review of v6.8 Part 2 flagged 3 polish items. All addressed.

## Regex tightening (NousResearch#75 follow-up)

The bullet-not-applicable regex `\S.{6,}` was accepting reasons of
7 chars (1 + 6) but the docstring and tests asserted ≥8 chars to
match the `imports_match_deliverable_entrypoints` invariant.

Tightened to `\S.{7,}` so 1 + 7 = 8 chars minimum. Same as the
imports_match length check, no off-by-one.

## Integration test gaps (NousResearch#74 follow-up)

Reviewer flagged two missing integration cases:
- Bare `verdict: reject` with no test_quality fields: floor bypasses
  (because verdict IS reject) but reviewer-fields gate catches the
  missing discipline. New test asserts the gate that catches it is
  MissingReviewerFieldViolation, NOT RuntimeFloorViolation. This
  proves the bypass doesn't accidentally green-light no-evidence
  rejects.
- No verdict at all: parsed_verdict is None, is_honest_reject is
  False, floor fires normally. New test asserts a result like "Just
  my thoughts, no verdict line." doesn't silently bypass the floor.

## edit_completed_task_result documentation

The reviewer noted this function exists at kanban_db.py:4180 to back-
fill results on done tasks (via `hermes kanban edit`). It bypasses
EVERY v6.7/v6.8 gate. If a future maintainer wires it into a worker
tool surface, every gate becomes bypassable: complete with low-
discipline, edit to high-discipline, or flip approve↔reject after
the gate already ran.

Added a multi-line .warning:: docstring listing every gate it
bypasses and the specific attacks a worker-accessible wiring would
enable. No code change — this is a comment-level guard for human
ops.

107/107 in test_kanban_completion_gates.py pass (105 + 2 new).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nban_tools

The previous self-review commit accidentally included 4 lines from
an uncommitted local edit (likely from an unrelated v6.7 swarm
session — comment said "Wave A NousResearch#28 hygiene gate (dispatcher
enforcement)"). Those lines called ``_enforce_kanban_complete_hygiene``,
a function that doesn't exist anywhere in the codebase — it would
NameError on every kanban_complete tool call.

Caught by diff review before squash-merge. Removed.

137/137 tests still pass after removal. tools.kanban_tools imports
cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jarvis-stark-ops
jarvis-stark-ops merged commit 42ba379 into main Jun 11, 2026
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