Skip to content

feat(core): port decision.* and its Inbox row; S4 gap close (WI-1069) - #1073

Merged
thedancingdeveloper merged 3 commits into
rust-corefrom
wi-1069-s4-gaps
Oct 17, 2026
Merged

thedancingdeveloper merged 3 commits into
rust-corefrom
wi-1069-s4-gaps

Conversation

@thedancingdeveloper

Copy link
Copy Markdown
Contributor

Closes the S4 gaps from docs/rust-port/gap-audit-2026-10-17.md for WI-1069.

  • decision.ask/answer/list/withdraw: service, entity and storage (migration 0023); test_decisions.py ported
  • decision.pending Inbox row, in Python's order (after grants)
  • parity steps for decision.* and the inbox.filter refusals; golden 21c95f6-s4 recorded from Python

Review (head 0085db1): no blockers. Gates:

  • clippy: clean
  • cargo test -p vogt-core: 861+4+3 pass
  • parity, rust vs 21c95f6-s4: cli, http and mcp agree
  • parity selftest: pass
  • pytest parity tests: pass
  • ruff: clean

All of this ran in-process only. The branch merges cleanly onto rust-core 360cd67.

Note: S-branches all append to the end of script.json and each records its own 21c95f6-sN golden. Re-record the golden after each one merges.

🤖 Generated with Claude Code

sprooty and others added 3 commits October 17, 2026 05:49
Ports decision.ask, decision.answer, decision.list and decision.withdraw
from application/services/decisions.py. A person answers; an agent asks,
and a pending decision past its expiry reads `expired` with no implied
answer. The Inbox shows each pending decision as a decision.pending entry.

Adds the Decision entity, its storage (migration 0023_decisions) and the
ported test_decisions.py cases in application/services/decisions_test.rs.
SequentialIds in the test is persisted, and each action opens its own
context, because an in-memory counter over a shared directory collides.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
…WI-1069)

Adds ten decision.ask/list/answer/withdraw steps to tests/parity/script.json
and records tests/parity/golden/21c95f6-s4 (cli, http, mcp) from the Python
implementation, the authority. The Rust core agrees on every step.

The decision service now reads the step clock as Python does: once per row
when it lists, twice in the answer body, and once for each write's view. The
MCP driver shares one process across steps, so the read count shifts every
later timestamp when it is wrong.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
…er (WI-1069)

Two refusal steps for preference.set inbox.filter (an unknown source, an
unknown field) and a read-back, so the B5 blocker on refused filter values
is held by the parity harness. Golden 21c95f6-s4 re-recorded from Python
for cli, http and mcp; the Rust core agrees on every step.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Signed-off-by: sprooty <sprooty@sprooty.com>
@thedancingdeveloper
thedancingdeveloper merged commit b2c3d08 into rust-core Oct 17, 2026
10 of 15 checks passed
@thedancingdeveloper
thedancingdeveloper deleted the wi-1069-s4-gaps branch October 17, 2026 06:30
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