Skip to content

chore: rolling promotion dev -> main - #2767

Merged
namastex888 merged 13 commits into
mainfrom
dev
Aug 12, 2026
Merged

namastex888 merged 13 commits into
mainfrom
dev

Conversation

@namastex888

@namastex888 namastex888 commented Aug 11, 2026 •

Copy link
Copy Markdown
Contributor

Rolling Promotion PR

Auto-maintained rolling promotion PR from dev to main.

Process:

  • This PR is automatically created and kept open
  • Human reviews and merges when ready
  • Label ready-to-merge added when all checks pass

IMPORTANT: Merge with "Create a merge commit" — NEVER squash.
Squash merging breaks history sync between dev and main,
causing the next rolling PR to show all commits again.

Human approval required for merge to production.

Summary by CodeRabbit

  • New Features
    • Added optional task assignment to approved agents, including reasons, reassignment, clearing, validation, and timeline history.
    • Added CLI support for assignment during task creation and through task commands.
    • Lane-based board and roadmap data now preserve assignment details.
  • Bug Fixes
    • Existing databases automatically receive new assignment fields without schema-version changes.
    • JSON outputs consistently exclude runtime-only assignment data where required.
  • Tests
    • Expanded coverage for assignments, upgrades, imports, synchronization, concurrency, and board serialization.
  • Chores
    • Updated Genie package and plugin versions.

namastex888 and others added 9 commits August 10, 2026 21:37
…ssign/clear state API

A1 of cross-agent-delegate W1: additive nullable TEXT columns with
EXPECTED_SCHEMA/schemaIsCurrent lockstep and additive backfill (no
user_version bump); ROSTER typed constant (claude|codex|pi|hermes|prime)
with named rejection errors; declaration-only assignTask/clearTaskAssignment
appending assign/clear timeline events.
A2 of cross-agent-delegate W1: CLI verbs over the A1 state API (single
timeline event per op — no double-append), pair invariant + roster
rejections with exit 1 and named errors, declaration-only at any card
status, status renders the assignment, CLAUDE.md Task subcommands table
documents the verb/flags and the lane-path-only serialization consequence.
…eeze preserved

B of cross-agent-delegate W1: lane-path serializer gains the two declared-routing
fields (14-key explicit projection alongside lane/enforcedBlock); laneless --json
and mcp genieTask strip them via explicit key-picking projections, keeping the
byte-frozen shapes identical to pre-change output; leak lists extended and a
byte-identical laneless fixture regression added.
C of cross-agent-delegate W1: insertSnapshotRows carries
assigned_agent/assigned_reason (?? null backfill for older snapshots;
insertTaskRows extraction keeps cognitive complexity within budget);
exportState verified column-blind (no change); roadmap-sync.ts verified
hash-based — first sync after upgrade exports (never diverged), second is
none. Round-trip + older-snapshot + sync-baseline tests added.
Fresh reviewer re-derived all evidence at ca39117: six success
criteria PASS, full gate matches the declared pre-existing failure
set exactly, scope confined to wish files + two authorized
deviations. MEDIUM doc-contract finding carried into delegate-bridge
(W2) as a named prerequisite; two LOW + one INFO recorded.
Codex PR review (P2, verified): handleList serialized raw TaskRow[],
leaking assignedAgent/assignedReason onto a non-lane machine-readable
surface — the wish contract is lane-path board --json only. Hoist the
frozen projection into task-state.ts next to TaskRow (canonical copy,
was local to mcp-tools) and ship task list --json through it; leak
regression proven red on the unfixed code.
feat(v5): declared agent routing on the board (wish: cross-agent-delegate)
@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 98d744a6-23d2-41bb-b386-ef724fdad45e

📥 Commits

Reviewing files that changed from the base of the PR and between e346dc9 and 524a5b1.

📒 Files selected for processing (2)
  • src/lib/v5/task-state.test.ts
  • src/lib/v5/task-state.ts

📝 Walkthrough

Walkthrough

The change adds nullable task assignment fields, roster validation, transactional assignment and clearing APIs, CLI support, database backfills, snapshot compatibility, lane-board serialization, frozen MCP projections, design records, and version updates.

Changes

Cross-agent task assignment

Layer / File(s) Summary
Assignment design and delivery scope
.genie/INDEX.md, .genie/brainstorms/cross-agent-delegate/*, .genie/wishes/cross-agent-delegate/WISH.md
The design records define roster-based routing, W1 assignment scope, serialization rules, roadmap synchronization, and later delegation work.
Task assignment state and persistence
src/lib/v5/genie-db.ts, src/lib/v5/task-state.ts, src/lib/v5/*test.ts
Tasks gain nullable assignment fields. Existing databases receive additive columns. State APIs validate, persist, clear, snapshot, and restore assignments with timeline events.
Task creation and assignment commands
src/term-commands/v5-task.ts, src/term-commands/v5-task.test.ts
The CLI adds assignment options to creation and adds task assign support for assignment, reassignment, and clearing.
Board and MCP projections
src/term-commands/v5-board.ts, src/term-commands/v5-board.test.ts, src/lib/v5/mcp-tools.ts, src/term-commands/mcp.test.ts
Lane JSON includes assignment fields. Laneless JSON, task listings, and MCP responses preserve frozen projections without those fields.

Release metadata

Layer / File(s) Summary
Version metadata alignment
.claude-plugin/marketplace.json, package.json, plugins/*/package.json, plugins/*/*plugin*/plugin.json, plugins/hermes-genie/plugin.yaml
The Genie version is updated from 5.260810.1 to 5.260811.1 across package and plugin metadata.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: automagik-genie

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately identifies this pull request as a rolling promotion from dev to main.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/lib/v5/task-state.ts`:
- Around line 1190-1195: Move the current-row lookup and no-op comparison from
the outer assignTask flow into the apply.immediate() transaction, using the
transaction’s read immediately before mutation and event creation. Ensure
concurrent assign, clear, and reassign operations derive events from the row
state serialized by each immediate transaction, and add regression coverage
using Promise.allSettled() for these concurrent cases.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 54c071e3-505f-49c3-aa98-5fb05f388bb6

📥 Commits

Reviewing files that changed from the base of the PR and between 0b7a36e and e346dc9.

⛔ Files ignored due to path filters (1)
  • CLAUDE.md is excluded by !*.md
📒 Files selected for processing (23)
  • .claude-plugin/marketplace.json
  • .genie/INDEX.md
  • .genie/brainstorms/cross-agent-delegate/DESIGN.md
  • .genie/brainstorms/cross-agent-delegate/DRAFT.md
  • .genie/wishes/cross-agent-delegate/WISH.md
  • package.json
  • plugins/genie/.claude-plugin/plugin.json
  • plugins/genie/.codex-plugin/plugin.json
  • plugins/genie/.kimi-plugin/plugin.json
  • plugins/genie/package.json
  • plugins/hermes-genie/plugin.yaml
  • plugins/pi-genie/package.json
  • src/lib/v5/card-render.test.ts
  • src/lib/v5/genie-db.test.ts
  • src/lib/v5/genie-db.ts
  • src/lib/v5/mcp-tools.ts
  • src/lib/v5/task-state.test.ts
  • src/lib/v5/task-state.ts
  • src/term-commands/mcp.test.ts
  • src/term-commands/v5-board.test.ts
  • src/term-commands/v5-board.ts
  • src/term-commands/v5-task.test.ts
  • src/term-commands/v5-task.ts

Comment thread src/lib/v5/task-state.ts Outdated
namastex888 and others added 3 commits August 12, 2026 13:17
…e immediate transaction

Concurrent assign/clear/reassign writers previously read the current row
before the write transaction, so a racing commit could produce a stale
from in the timeline note, a stale no-op decision, or a raw FK-constraint
error on a concurrent delete. The row read, existence check, no-op
comparison, and event append now all run inside one immediate transaction.

Adds a multi-process Promise.allSettled regression test asserting the
wish-event timeline forms an unbroken from→to chain under contention.
…e the immediate transaction

assignTask and clearTaskAssignment read the current row and ran their
no-op comparison before the write transaction, so a racing writer could
commit in the window: a clear's 'was …' note could name a pair that was
no longer current, a stale no-op decision could double-write, and a card
deleted in the window surfaced a raw FK-constraint error instead of
UnknownTaskError. The row read, existence check, no-op comparison, and
event append now all run inside one immediate transaction (the
checkoutTask/deleteTask pattern); pair validation and the fail-fast
existence check keep their original error precedence.

Adds a multi-process Promise.allSettled regression test: 9 concurrent
assign/clear/reassign writers on one card, asserting the assign/clear
timeline replays to the exact final row and every clear names the pair
its transaction serialized against (fails ~3/4 runs pre-fix).
…serialize

fix(task-state): serialize assign/wish identity writes inside their immediate transactions
@namastex888
namastex888 merged commit b0aa390 into main Aug 12, 2026
17 of 20 checks passed
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