Status
Active execution routing — updated 2026-07-31 after one owner QA round, against main@e58fef9; draft PR #661 currently at 50c9c4a.
This issue owns no implementation, product contract, roadmap decision or acceptance evidence. Lifecycle authority: docs/issue-lifecycle.md; product roadmap/scope authority: #475 .
Daily brain and agent pickup contract
This issue is the repository's mutable current control plane . A daily repository scan updates this body with the latest executable truth and appends one dated comment recording only what changed since the previous scan.
The scan must:
read latest main, open and recently changed PRs, tracking: current context index — milestone, critical path, what an agent may pick up #27 , the roadmap guard, and only the directly referenced owning/acceptance issues;
reconstruct the current milestone, accepted versus merely merged work, active owners, blockers, dependency order and safe parallel lanes;
keep a short Claimable now section naming only work another agent can start without an unresolved owner decision or an existing implementation owner;
update or reuse an existing owning issue before proposing a new one; create a new issue only for a distinct executable outcome with no current home;
append a dated delta comment explaining additions, removals and priority changes. The comment is history; this body remains the current truth.
An open issue, a priority prefix or a green test suite does not make work claimable. Research, Discussion, Parked, Deferred and Superseded issues are never implementation pickups unless a later maintainer disposition resolves their decision and promotes them here.
Claim protocol
An existing open PR means the implementation issue is already claimed. A second agent may review it, but must not start a competing implementation branch unless the control plane explicitly splits ownership.
For unclaimed work listed under Claimable now , claim it before editing by assigning the issue to the working GitHub agent/account. If that agent cannot be assigned, add CLAIM — <agent/session> — branch <name>.
Open a draft PR linked to the owning issue as the first durable work receipt. One issue has one active implementation owner unless the issue explicitly names disjoint file ownership and merge order.
A claim ends when its PR merges/closes or the claimant posts a release comment. Stale work is not silently duplicated.
Implement the owning issue's accepted outcome and stop condition. Record adjacent findings; do not absorb them into the PR.
Claimable now
Exactly two implementation leaves are safe to claim, one per QA repair front:
Front A — [defect·P1] A currency that appears only in a cash-flow row is added to the USD total at 1.0 — #612's refusal has held currencies as its domain, and no rate is ever requested #649 : widen the shared FX universe to every currency entering account aggregation, fetch it, then fail closed if still unavailable. Maintainer decision is recorded on [defect·P1] A currency that appears only in a cash-flow row is added to the USD total at 1.0 — #612's refusal has held currencies as its domain, and no rate is ever requested #649 .
Front B — [defect·P1] add-cash refuses the session it exists for: the drift gate compares question_queue and state_snapshot whole, so the card-beat cash answer is unrecordable #665 : make the declared post-card cash-answer lifecycle executable without mistaking expected cash-derived projection changes for source drift. Maintainer decision is recorded on [defect·P1] add-cash refuses the session it exists for: the drift gate compares question_queue and state_snapshot whole, so the card-beat cash answer is unrecordable #665 .
Do not claim #664 , #673 , #667 , #677 or later leaves until the preceding issue in their front has landed or explicitly released ownership.
PR #661 is not a third active front. Its current head is frozen pending the scope split recorded on the PR; no competing branch should be created.
Current milestone and acceptance truth
M1 remains owner-unaccepted.
The owner completed one real QA round, but #610 did not receive an evaluable TradeEvaluation answer:
This is distinct from severity and priority:
Broad M2 remains closed. The previously approved #403 /#450 rationale-memory lane is paused at a safe split boundary while the two QA repair fronts are active.
Current repository truth
Latest observed main: e58fef9 , merged PR fix(ledger): a position the user never sold keeps its cycle across a new declaration (closes #539, closes #536) #659 .
PR fix(ledger): a position the user never sold keeps its cycle across a new declaration (closes #539, closes #536) #659 closed [bug·design·P2] Every new snapshot declaration re-asks for theses it was already given #539 /[bug·design·P2] A review-lane anchor adoption spends the user's holding-duration answer #536 : a continuously held position preserves cycle start, evidence basis and cycle_seq across declarations. Its PR reports the full offline suite passing; this scan could not retrieve a combined CI status for the merge SHA, so current-main CI is not independently confirmed here .
Open PRs: draft feat(rationale): a canonical stream for why the user says they still hold a position (refs #403, refs #450) #661 and stale-base documentation PR docs(registry): profile.md has no writer, and both surfaces that claimed one now say so (refs #58) #614 .
Draft feat(rationale): a canonical stream for why the user says they still hold a position (refs #403, refs #450) #661 current head: 50c9c4a ; its PR workflow completed successfully. The PR body still claims Front-B-only scope, but the branch now includes record-rationale and next-review integration plus unresolved integration findings. It must be split before further acceptance review.
[docs] AGENTS.md, the first-review flow and the engine disagree about which question kinds may carry a private surface #666 is a narrower QA reproduction of [defect·contract] The instruction floor says two question kinds may be re-worded; the code and its own reference say six #657 and is not a separate implementation owner.
QA repair Front A — truth and usable pre-trade evaluation
One issue and one PR at a time, in this order:
[defect·P1] A currency that appears only in a cash-flow row is added to the USD total at 1.0 — #612's refusal has held currencies as its domain, and no rate is ever requested #649 — cross-currency cash-flow aggregation. Fetch every currency that enters the aggregate; remove 1.0 identity fallback. False account-level figures are the highest-severity finding (the synthetic reproduction was wrong by 28× while claiming full confidence).
[defect·P1] A TWD position's cost basis reaches the question surface labeled USD, and the "largest cost" ranking compares raw units across currencies #664 — mixed-currency question facts and ranking. The engine supplies native amount/currency for the stem and one normalized value for selection. No agent FX arithmetic; no raw-unit ranking.
[defect·P1] One unmatched sell anywhere in the history disables consider for the whole account — the review lane discloses the same condition and continues #673 — one per-holding integrity warning disables all of consider. Exclude and disclose the affected holding; keep only structural/unscoped corruption fatal. A premise on the excluded holding refuses by name.
[design·P1] When consider cannot compute, no contract owns the answer — so the agent narrates the gap instead of framing the decision #674 — bounded framing when consequence genuinely cannot compute. Use only frozen, already-computed facts; frame user-nominated options without recommending one or creating a second consequence engine.
Stop after #673 if the repaired real route now reaches a useful answer; #674 is still needed as a contract leaf, but it must not be used to preserve a recoverable refusal.
QA repair Front B — review lifecycle and honest evidence
One issue and one PR at a time, in this order:
[defect·P1] add-cash refuses the session it exists for: the drift gate compares question_queue and state_snapshot whole, so the card-beat cash answer is unrecordable #665 — add-cash dead end. The answer the flow asks for must reach the amended card on the session's frozen facts.
[defect] planned_entry declares no answer requirement, then preview refuses without a captured thesis — a dead end reachable only by following the contract #667 — planned_entry contract dead end. Require and accept thesis capture in the same exchange; keep the honesty validator strict.
[defect] A light-tier weekly_review cannot produce a receipt that is both honest and verifiable — the plan says the cash anchor is not applicable, the route contract demands one anyway #677 — light-tier weekly receipt contradiction. Derive the cash-event obligation from the executed plan; not_applicable means zero event, never a fabricated decline.
[process·qa] Cash-anchor recompute mid-first_review has no documented receipt slot for its second preview card #663 — second preview receipt. Receipt exactly one preview artifact: the final pre-commitment card used for the rule decision, after the recompute loop settles.
[design·process] Cash-anchor ask has no format contract — a percentage answer needs three round-trips to resolve #662 — cash input friction. Only after the lifecycle works, choose the smallest explicit input contract; do not add percentage arithmetic without naming its denominator and putting the computation in the engine.
Runtime completion (#665 /#667 ) precedes acceptance-instrument cleanup (#677 /#663 ), even when the latter makes QA verification red.
Queued after the two repair fronts
These remain valid, but are not launch-blocking pickups now:
[bug·design·P1] The revisit backlog shows the return rate its own ranking rejected — and prices a partial trim as if the whole position had gone #670 : revisit card must display the dollar-impact magnitude that actually ranked the item; partial trims must not read like whole-position outcomes.
[bug·gate·P1] R1 and A-13 both pass a card that violates them — each gate enumerates a symptom instead of naming its mechanism #671 : fix mechanism-level R1 and CJK punctuation gates, then settle one locale rendering for percentage points.
[defect·P2] consider's own live-resolved prices are reported as mode=agent_feed, not engine_fetch #654 : truthful consider price provenance (engine_fetch versus agent_feed). M1 provenance debt, lower harm than wrong arithmetic or a dead route.
[defect·copy] The realized payoff sub-line shows per-trade averages without saying so, four lines under the realized total #668 : label realized payoff amounts as per-trade averages; small mechanical copy leaf.
[defect·contract] The instruction floor says two question kinds may be re-worded; the code and its own reference say six #657 : synchronize private-surface eligibility and preserve recalled-statement grounding. [docs] AGENTS.md, the first-review flow and the engine disagree about which question kinds may carry a private surface #666 contributes evidence only.
[bug·a11y·P2] Ruling 8 (exactly one L1, and it is Block 4) is defeated in dark mode — the class is present, the emphasis is not #672 : dark-mode/accessibility follow-up.
#675 , #676 , #658 , #650 , #446 , #660 and other research/future-memory items remain deferred or serially later. Do not mix them into QA repair PRs.
PR #661 disposition
Current head may not merge as one combined slice.
Keep feat(rationale): a canonical stream for why the user says they still hold a position (refs #403, refs #450) #661 as the canonical stream/schema/fold/bounded-reader leaf only, including corruption fail-closed, merged-chain ordering, fsync/durability and privacy/registry proof.
Move direct entry and next-review integration to a separate [feat·M2] Append-only rationale refresh anchored to a position cycle #403 -owned draft PR stacked after the accepted stream, carrying the already-found fixes and unresolved findings.
Update feat(rationale): a canonical stream for why the user says they still hold a position (refs #403, refs #450) #661 's body, head evidence and test count after the split; then request an independent state-integrity review.
Do not add condition mapping, same-ticker consider, profile verdicts or StandingRule work.
Verification and privacy gates for every repair PR
Owning issue acceptance criteria and the maintainer disposition are both satisfied.
Focused regression plus full offline suite passes.
The relevant mutation fails.
PR CI is green and the log identifies the tested tree.
Failure leaves no pending session, canonical write or misleading artifact.
Public evidence uses synthetic/generic data only; real trade, holding, motive and card content stay local.
A user-visible path needs a real delivery/receipt proof where applicable; generated artifacts alone are insufficient.
Next order
Claim and implement [defect·P1] A currency that appears only in a cash-flow row is added to the USD total at 1.0 — #612's refusal has held currencies as its domain, and no rate is ever requested #649 and [defect·P1] add-cash refuses the session it exists for: the drift gate compares question_queue and state_snapshot whole, so the card-beat cash answer is unrecordable #665 as the only two parallel fronts.
Advance serially through [defect·P1] A TWD position's cost basis reaches the question surface labeled USD, and the "largest cost" ranking compares raw units across currencies #664 /[defect·P1] One unmatched sell anywhere in the history disables consider for the whole account — the review lane discloses the same condition and continues #673 and [defect] planned_entry declares no answer requirement, then preview refuses without a captured thesis — a dead end reachable only by following the contract #667 /[defect] A light-tier weekly_review cannot produce a receipt that is both honest and verifiable — the plan says the cash anchor is not applicable, the route contract demands one anyway #677 /[process·qa] Cash-anchor recompute mid-first_review has no documented receipt slot for its second preview card #663 respectively; do not batch each chain into one PR.
Split feat(rationale): a canonical stream for why the user says they still hold a position (refs #403, refs #450) #661 without expanding it; keep M2 paused.
Freeze a new exact main SHA and rerun [QA·dogfood] Judgment-quality dogfood — does a real consider answer now carry a supported insight? #610 after [defect·P1] One unmatched sell anywhere in the history disables consider for the whole account — the review lane discloses the same condition and continues #673 reaches main and Front B has a safe review boundary.
Only after that acceptance verdict choose between [design·P1] When consider cannot compute, no contract owns the answer — so the agent narrates the gap instead of framing the decision #674 completion, card-content leaves, or resuming the split [feat·M2] Append-only rationale refresh anchored to a position cycle #403 integration.
Stop conditions
Wrong confident arithmetic outranks a clean refusal; a clean refusal outranks copy polish.
Runtime user completion outranks receipt/tooling cleanup, but acceptance cannot be declared until the receipt is honest.
A green suite does not override a state-integrity or user-delivery finding.
No giant QA cleanup PR: one owning issue, one reversible leaf, one acceptance proof.
No third active implementation front.
Merged code is not owner-visible acceptance.
Status
Active execution routing — updated 2026-07-31 after one owner QA round, against
main@e58fef9; draft PR #661 currently at50c9c4a.This issue owns no implementation, product contract, roadmap decision or acceptance evidence. Lifecycle authority:
docs/issue-lifecycle.md; product roadmap/scope authority: #475.Daily brain and agent pickup contract
This issue is the repository's mutable current control plane. A daily repository scan updates this body with the latest executable truth and appends one dated comment recording only what changed since the previous scan.
The scan must:
main, open and recently changed PRs, tracking: current context index — milestone, critical path, what an agent may pick up #27, the roadmap guard, and only the directly referenced owning/acceptance issues;An open issue, a priority prefix or a green test suite does not make work claimable. Research, Discussion, Parked, Deferred and Superseded issues are never implementation pickups unless a later maintainer disposition resolves their decision and promotes them here.
Claim protocol
CLAIM — <agent/session> — branch <name>.Claimable now
Exactly two implementation leaves are safe to claim, one per QA repair front:
Do not claim #664, #673, #667, #677 or later leaves until the preceding issue in their front has landed or explicitly released ownership.
PR #661 is not a third active front. Its current head is frozen pending the scope split recorded on the PR; no competing branch should be created.
Current milestone and acceptance truth
M1 remains owner-unaccepted.
The owner completed one real QA round, but #610 did not receive an evaluable TradeEvaluation answer:
considerpath before consequence computation.mainSHA after the repair boundary.This is distinct from severity and priority:
Broad M2 remains closed. The previously approved #403/#450 rationale-memory lane is paused at a safe split boundary while the two QA repair fronts are active.
Current repository truth
main:e58fef9, merged PR fix(ledger): a position the user never sold keeps its cycle across a new declaration (closes #539, closes #536) #659.cycle_seqacross declarations. Its PR reports the full offline suite passing; this scan could not retrieve a combined CI status for the merge SHA, so current-main CI is not independently confirmed here.50c9c4a; its PR workflow completed successfully. The PR body still claims Front-B-only scope, but the branch now includesrecord-rationaleand next-review integration plus unresolved integration findings. It must be split before further acceptance review.QA repair Front A — truth and usable pre-trade evaluation
One issue and one PR at a time, in this order:
consider. Exclude and disclose the affected holding; keep only structural/unscoped corruption fatal. A premise on the excluded holding refuses by name.Stop after #673 if the repaired real route now reaches a useful answer; #674 is still needed as a contract leaf, but it must not be used to preserve a recoverable refusal.
QA repair Front B — review lifecycle and honest evidence
One issue and one PR at a time, in this order:
add-cashdead end. The answer the flow asks for must reach the amended card on the session's frozen facts.planned_entrycontract dead end. Require and accept thesis capture in the same exchange; keep the honesty validator strict.not_applicablemeans zero event, never a fabricated decline.Runtime completion (#665/#667) precedes acceptance-instrument cleanup (#677/#663), even when the latter makes QA verification red.
Queued after the two repair fronts
These remain valid, but are not launch-blocking pickups now:
considerprice provenance (engine_fetchversusagent_feed). M1 provenance debt, lower harm than wrong arithmetic or a dead route.#675, #676, #658, #650, #446, #660 and other research/future-memory items remain deferred or serially later. Do not mix them into QA repair PRs.
PR #661 disposition
Current head may not merge as one combined slice.
consider, profile verdicts or StandingRule work.Verification and privacy gates for every repair PR
Next order
mainSHA and rerun [QA·dogfood] Judgment-quality dogfood — does a real consider answer now carry a supported insight? #610 after [defect·P1] One unmatched sell anywhere in the history disables consider for the whole account — the review lane discloses the same condition and continues #673 reaches main and Front B has a safe review boundary.Stop conditions