feat(kanban): add review-required as a first-class block kind (AKS-09C) - #1
Merged
dolbabot merged 2 commits intoJul 22, 2026
Conversation
dolbabot
force-pushed
the
feat/aks-09c-review-required-kind
branch
from
July 22, 2026 16:33
a4166d3 to
59df42a
Compare
dolbabot
changed the base branch from
vendor/v0.19.0
to
vendor/installed-v0.19.0-d7b36070
July 22, 2026 16:34
Promote the long-standing review-required *convention* (an un-typed kanban_block whose reason is prefixed "review-required: ") into a first-class typed block kind, on the exact installed v0.19.0 source line (d7b3607). review-required is a sticky workflow handoff to a human reviewer: - added to VALID_BLOCK_KINDS and the model-visible kanban_block schema enum - persists kind + reason byte-for-byte (no normalization to needs_input / capability) - routes to blocked (not todo like dependency) and participates in the unblock-loop breaker like the other truly-blocked kinds - sticky: never auto-retried, requeued, normalized, or auto-unblocked by the dispatcher (recompute_ready / _has_sticky_block leave it alone) - deliberately NOT added to _GOAL_MODE_BLOCK_ALLOWED_KINDS: a goal-mode worker must not escape the completion judge via a review handoff Existing dependency/needs_input/capability/transient behavior is unchanged; arbitrary unknown kinds are still rejected. Tests: new tests/hermes_cli/test_kanban_review_required_kind.py pins kind membership, byte-for-byte persistence, exact blocked-event payload, stickiness across recompute_ready, blocked-not-todo routing, loop-breaker escalation, and unknown-kind rejection. tests/tools/test_kanban_tools.py gains a goal-mode rejection test and a schema-enum coverage test.
dolbabot
force-pushed
the
feat/aks-09c-review-required-kind
branch
from
July 22, 2026 16:53
59df42a to
5e48168
Compare
The contributor-check workflow hardcoded merge-base against origin/main. This silently scanned unrelated commits on main when a PR targeted a vendor (non-main) branch, causing false-positive failures on contributor emails that were not introduced by the PR. Fix: accept an explicit base_sha input (defaulting to the pull_request event base SHA when available), validate it is a real commit and ancestor of HEAD, and use it as the scan range boundary. The caller (ci.yml) now passes github.event.pull_request.base.sha. Existing main-targeting PR behavior is preserved. Fallback from origin/main is removed; the workflow now fails closed on missing/invalid base.
dolbabot
force-pushed
the
feat/aks-09c-review-required-kind
branch
from
July 22, 2026 17:26
3d36ac5 to
acde203
Compare
dolbabot
merged commit Jul 22, 2026
42b0e86
into
vendor/installed-v0.19.0-d7b36070
79 of 81 checks passed
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
AKS-09D (corrected AKS-09C): promote the long-standing
review-requiredconvention — an un-typedkanban_blockwhosereasonis prefixed"review-required: "— into a first-class typed blockkind, on the exact installed v0.19.0 source line.Fork-only. Base is
vendor/installed-v0.19.0-d7b36070(the exact installed commit), notNousResearch/hermes-agent. Manual human merge only.Corrected source identity (verified against full, unshallowed history)
/home/dolbabot/.local/bin/hermes/home/dolbabot/.hermes/hermes-agent(clean)d7b36070ef807841699ad32c5b6af547fee3ff64vendor/installed-v0.19.0-d7b36070@d7b36070ef807841699ad32c5b6af547fee3ff64feat/aks-09c-review-required-kind@acde2033aa91387a08a0d9b23d7e49f4b0961e9aWhy the prior identity was wrong
The install clone was shallow.
origin/mainsat at a shallow-grafted boundary commit, sogit rev-list --count origin/main..HEADreturned 1 — counting only the fabricated graft edge, not real history.merge-base --is-ancestoralso returned false on the truncated DAG, misleadingly suggesting the install had diverged. I incorrectly concluded "installed =cbc1054e+ 1 carried commit." Aftergit fetch --unshallow, the true relationship is unambiguous:What changed (minimal, on exact d7b3607)
review-requiredjoins the canonical block-kind set as a sticky workflow handoff to a human reviewer:hermes_cli/kanban_db.py— added"review-required"toVALID_BLOCK_KINDS(+ comment block); documented it inblock_task's docstring. Inherits the "truly-blocked" routing (lands inblocked, recurrence-counted) exactly likeneeds_input/capability— sticky by construction, no special-case code.tools/kanban_tools.py— added"review-required"to the model-visibleKANBAN_BLOCK_SCHEMAkindenum + description.hermes_cli/kanban.py— documented the new kind inblock --kindhelp.agent/prompt_builder.py—KANBAN_GUIDANCEnow points workers at the first-classkind="review-required"form.kanban.md(tool table +blockedevent table) andkanban-worker-lanes.md(convention note).tests/hermes_cli/test_kanban_review_required_kind.py; two regression tests intests/tools/test_kanban_tools.py.Behavior contract
review-requiredVALID_BLOCK_KINDSblocked(nottodo)recompute_ready/_has_sticky_blockleave it alone)triage)_GOAL_MODE_BLOCK_ALLOWED_KINDSExisting
dependency/needs_input/capability/transientbehavior unchanged; unknown kinds still rejected.Schema before / after
Validation on the exact d7b3607 base (real, reproducible)
Test env: isolated venv at the worktree,
pip install -e ".[dev]",HERMES_HOME=$(mktemp -d). Live install untouched.Direct tool invocation (real
_handle_block):Targeted + nearest complete Kanban suites (on d7 base): 433 passed, 0 failed
Broad kanban suite (
pytest tests/hermes_cli/ -k kanban): 16 failed on the feature branch. The identical command + environment run on pristined7b36070produces the identical 16-failure set (diffof sorted FAILED lists is empty). These are pre-existing timing/parallelism flakes (test_kanban_db.pystale-claim,test_kanban_decompose.pyLLM-fanout,test_kanban_lifecycle_hooks.py) unrelated to block-kind routing; all 3 files pass in isolation (245 passed) on the feature branch. This comparison is reported separately as required and does not mask any failure introduced by this change — none were introduced.Lint / type / format:
ruff check(CI-blocking gate): All checks passed!git diff --check: clean.ty check: zero new diagnostics in every changed source file (identical pristine/feature counts: kanban_db 7=7, kanban.py 21=21, kanban_tools 0=0, prompt_builder 3=3); new test file 0 errors.Changed files (8 runtime + 2 CI-control)
Installation preserves the installed source line
Installing the reviewed head is now a narrow, two-commit patch over the exact installed
d7b36070— no unrelated upstream commits, no runtime upgrade.merge-base(PR head, PR base) = d7b36070; head is now 2 commits ahead (1 runtime + 1 CI-control). Reproducible viagit fetch <fork> acde2033aa91387a08a0d9b23d7e49f4b0961e9a && git checkout <sha> && pip install -e ".[dev]". Not performed here.Corrected CI state (AKS-09F)
GitHub Actions on the retargeted PR: in progress at time of body update (
mergeable: MERGEABLE,mergeState: UNSTABLEwhile checks run). The blocking Python gates areruff enforcement(passing locally) and the Python test slices (the broad-suite flakes above are pre-existing on pristined7b36070).Explicit non-actions (per AKS-09D scope)
Not installed; no live Hermes files edited; no Hermes/gateway restart; no worker/canary run; AKS-09A not resumed; Foundry/Foundry Controller/Preflight policy untouched; this PR not merged; baseline-control smoke PRs NousResearch#6/NousResearch#7 untouched; no second PR opened.
Manual human merge only.
CI-control commit (additional, metadata-only)