clanker
|
2d0e09d1d9
r5: harness split (arch 18) — the monolith becomes a package. test/harness.py: the FakeSaddle daemon, every shared wire helper (http/act/login/slot_public/wait_for/quiet_window/db/check, task_state/wait_task_done/create_queued/enqueue_task/saddle_api/saddle_card/http_get_page/dump_threads and friends), the per-shard fixtures (Ctx/start_bundle), and the runner (run_bundle + run_all_parallel + main) — the parallel spawn now targets the entry shim so 'harness' stays one module instance per process, and run_bundle imports the bundle module lazily (after that shard's environment exists, so star-imported runtime globals are the shard's own) then re-syncs WORK/DB_PATH/ports onto it (the sequential debug path reuses modules across shards). test/bundles/<name>.py ×11: the scenario bodies moved verbatim (bundle_X -> run(ctx)); the x7 duplicated goal_state closures collapse onto harness.goal_state, late-bound through the runner's fixture ctx so the answers/replay restart scenarios' re-logins keep working (the first cut snapped the auth at shard start and the replay redelivery scenario caught it). test/web_stack_test.py stays the meson entry (args unchanged) and the shard spawn target. The S-workstream handoff survivors verified byte-intact after the move: the goalui S2 verdict-goal pins (resolveReviewBlock/goal.open_blocks/feedback posting/extraText gating on the goal page) and the goals S3 park-second waits (strictly-newer completed_at vs suspended_at seconds under SADDLE_GOAL_RESUME_S=1). Both execution modes green: parallel shards 851/0, WEBSTACK_SEQUENTIAL 851/0. 851 checks.
|
1 ay önce |
clanker
|
e236aa7079
r3: api_tokens dropped (arch 24, P3-2) — saddles.token is the single credential store: the legacy table, its entity mapping, the startup ensure_saddle_tokens migration (main.vala's call + the service), token_for_saddle (the saddles page and the /start callback token read the row directly), unregister's sweep, and saddle_for_token's fallback read all die. Nothing deployed predates the plan-10 row token (operator decision), so no credential loses validity — a legacy-shaped token string now 401s everywhere, pinned by the rewritten restart scenario: the fresh schema carries no api_tokens table, the row token survives a restart unchanged and still authenticates, and the legacy-shaped string authorises nothing. 850 -> 851 checks.
|
1 ay önce |
clanker
|
2cf9149d29
r3: legacy wire removal (arch 19, P3-1) — SaddleUpdateEndpoint + SaddlePollEndpoint and their routes are gone (the daemon never called them; verified against saddle/src at review time): the poll-era ingest/verdict pair 404s now, pinned by regressions. The service support that existed only for them dies with them: take_pending_answers (the saddle-keyed variant; the for_task assignment carrier stays), take_pending_comments + PendingComment, validate_token (its only caller was the update/poll bearer pin — resolve_bearer collapses to saddle_for_token for the all-id-less wire), the subtask/plan refusal arms, and the update endpoints' own statics move to SaddleWire (read_json_body/json_ok/json_error shared by every remaining /api/saddle/* route). Knock-ons per the plan: tasks.working_branch was write-dead (only /update done ever supplied it) — column + entity field + TaskDetailPublic member + the task-page line + mark_terminal/complete_task's dead parameter die; the plain-task plan-review UI in task_detail.html was unreachable (plans are goal-only since plan 12; only /update block type=plan could raise one) — BlockView.is_plan_review, the plan-review section, and the task page's ~180-line plan-remarks JS (dead with no [data-plan-review] targets) are removed; AnswerBlockAction's plan-verdict arms stay (the deep-link API + off-contract pushes keep working). Test fixtures rewrite into the push-era shapes: block raises ride POST /results blocked pushes (pages/lifecycle/push bundles), the terminal-task review fixture inserts its row directly (terminal pushes are consumed silently), rejected entries ride a results push, the dashboard review raise rides a review entry, the queued-state guard becomes a results state no-op, the /update subtask/plan refusals become 404 pins, and branch_advanced — the /poll verdict hint — is re-pinned on its surviving surface: the answers bundle's parked-resume allocation now asserts branch_advanced=true after a strictly-newer sibling completion on the shared branch. 856 -> 850 checks.
|
1 ay önce |
clanker
|
8c55db2b38
r2: release_task — the ONE owner of close-open-sessions + free/requeue-saddle (arch 13): TaskService.release_task(task_id, outcome, requeue) folds close_open_sessions/free_saddles_running (their guarded UPDATEs byte-identical, the ask-race comment kept), complete/cancel/fail/requeue/retry collapse onto it; mark_saddle_unreachable keeps its keep-parked gate + 4-family flip + comment and its own guarded OFFLINE write, then releases the held task's sessions through the owner (the idle-free no-ops against the offline row — current_task_id already cleared under the entry-seen guard); unregister releases its held task through the requeue path too (deviation: the old inline 4-family flip left suspended tasks parked and open sessions dangling on deleted rows — the plan's normal form routes both through the owner; unpinned before, pinned now). Tests: the release outcomes (stopped requeue / done terminal) + both unregister routes (dead-host offline release, session-less direct release) — 849 -> 856.
|
1 ay önce |
clanker
|
6be8c5e830
r1: parser-unification pin — the completion-accept refusal and the push chips must name the same repo-qualified unpushed row (one GoalService.parse_goal_branches feeding both surfaces).
|
1 ay önce |
clanker
|
d46cc3426c
r1: twin guards removed (P3.3, sequenced last) — the one-pending render guard on the goal page and answer_block's twin-answer sweep die: fresh DBs cannot hold pre-dedupe twins and the raise-side cross-dedupe (4884259) keeps them single; their tests now pin the raise-side single-row invariant (a redelivered review-kind push adopts the pending row, the verdict leaves zero pending completion-family rows).
|
1 ay önce |
clanker
|
7db4cac172
s5: UI polish — mechanical rows ('session context restored', 'parked until') filtered from every user-facing timeline (write-side filtering on the daemon-ingest path, the web's restore comment removed, read-side filters on the goal narrative/task thread/dashboard so legacy rows vanish too; the raw terminal keeps everything), label reconciliation (a goal in completion review reads 'awaiting your review', the run-task status card agrees via display_map_for/display_of_detail — no bare 'blocked' for review parks), and verdict-shaped blocks pinned to their explicit accept/reject + free-text forms with NULL-options questions staying question-shaped.
|
1 ay önce |
clanker
|
2b251e6521
s4: terminal-text single representation — the failure path stops writing the duplicate agent comment and retry stops copying summary→comment (tasks.summary is the terminal cache, the narrative renders summary_lead, the task page renders the card); human comments keep their ONE writer (the web's user-comment row — tests pin the single-row invariant; the daemon-side USER_COMMENT echo suppression is D's item).
|
1 ay önce |
clanker
|
0d1f6a97f4
s3: delta resume notices — take_resume_notice emits ONE-LINE task statuses (status + the summary's first line) with full bodies only for NEW completions each exactly once; the statuses/reports double embedding is dead, so the notice size is constant per event instead of cumulative with every parked round.
|
1 ay önce |
clanker
|
f3e779df22
s2: reject-flow fixed and verdict wording server-owned — submitPlanRemarks resolves the block from the actual [data-plan-review] container (any open block, not just goal.plan_pending_block — the completion-review reject button), remark-less rejection allowed when the feedback textarea has content, and the goal page posts verdict markers / raw feedback while the SERVER wraps the stable per-kind prefixes (hidden-input constants removed from every template; approvals byte-identical, goal feedback keeps the prefix + blank-line shape, task feedback its single-newline shape).
|
1 ay önce |
clanker
|
4b13a1ea1f
s1: canonical-on-accept — goals.completion_report is written ONLY by the accept verdict (the winning block's body); submit_completion stops writing it at submission (the pending report lives only in its block), reject/revise leaves the goal row clean, and fail_goal's failure report keeps its goal-side home. Tests pin all four directions incl. the accept-gated goals.plan column.
|
1 ay önce |
clanker
|
4884259da9
fix: at most ONE pending completion-family block renders (stale pre-dedupe twins hidden), and the verdict answers every pending twin — the review shows once, the report card only after acceptance
|
1 ay önce |
clanker
|
253551bba2
ui: the completion review renders as the rich attention block while pending (highlight-remarks queue shared with the plan review, push chips + compare above the report, accept gate server-side) and the Completion review card becomes the terminal summary
|
1 ay önce |
clanker
|
89d58b1a8c
fix: the completion review is one row — review-family cross-dedupe in raise_run_block (the daemon's done-park review block adopts the web's completion row instead of raising a twin that double-rendered the goal page review and pinned the dashboard); compare-changes link on the goal status head
|
1 ay önce |
clanker
|
2d429de3b1
qa: load-marginal wait windows widened + two read-act gaps closed — the capability-wait/affine-wake/plan-review waits move to 90-120s (each fired once when external load tripled shard walls to 90-150s); the queue-row waiting/unreachable flags become short polls (stable states, once sampled before the pulse settled); goalui's requeue_run acts on the SAME state that satisfied the wait (a second read raced the scripted daemon's ask reviving the saddle and the conditionally-authored action vanished between reads)
|
1 ay önce |
clanker
|
4ad0c84cc0
qa: terminal states are atomic-sticky — set_status and add_block's park flip guard the transition in the UPDATE's WHERE (a late 'working' push interleaving a completion on the main loop used to resurrect the task as working AFTER its session closed done — the parked-resume race, plan-15 C deviation 4; the callers' terminal checks have already yielded by write time). Harness: the dispatch rules-order fixture attaches rules while DRAFT then enqueues (the 1s dispatch tick could beat the attaches under load), and the app-ready probe requires OUR process alive — a free_port() TOCTOU handed the port to another shard's app whose identical seed answered the probe while ours died at MHD bind
|
1 ay önce |
clanker
|
cdd34f97e3
C5: dashboard deep-link closure verified on the single-row world
|
1 ay önce |
clanker
|
3aadf3b00c
C4: goal page batch — head line, expanders, live push flags, accept gate (F9)
|
1 ay önce |
clanker
|
e2a11c459d
C3: goal_events deleted — terminal watermark + derived narrative
|
1 ay önce |
clanker
|
e7e167579f
C2: goal comments ride the run task; system events styled (F8)
|
1 ay önce |
clanker
|
d1c8bea7e2
C1: goal blocks ride the run task — one row, one answer path (F6)
|
1 ay önce |
clanker
|
8765b5a44e
B1-B6: goalui test shard — plan 14 workstream B coverage
|
1 ay önce |
clanker
|
eae7936bdf
B4: sessions.resume_notice — terminal session dropdown + resume-info panel
|
1 ay önce |
clanker
|
79c28cc48a
ui: comments display — body-first projections, footnote styling, no command echo
|
1 ay önce |
clanker
|
fd7d90fbb7
goals: failure cascade — fail_goal cancels non-terminal tasks, narrated
|
1 ay önce |
clanker
|
00c1a6dd2e
replay: idempotent terminal + narrative projections — once per entry id, ever
|
1 ay önce |
clanker
|
9bca970531
replay: daemon-global entry dedup — ingestion keys on (saddle, entry id)
|
1 ay önce |
clanker
|
8d895974b4
goals: assignment context_update — the resume-time instruction delta
|
1 ay önce |
clanker
|
ac95a52656
ui: goal visual identity — accent, icon, distinct cards
|
1 ay önce |
clanker
|
e266a9e4af
ui: every terminal link opens in a new tab
|
1 ay önce |