saddle-Clanker-Saddle
|
4f74836c93
Park/answer-wake fix: allocation guard, busy-answer delivery, batched verdicts
|
3 weeks ago |
saddle-Clanker-Saddle
|
5e03078f1c
Merge origin/goal/advisor (advisor refinements) into task/27-180
|
4 weeks ago |
saddle-Clanker-Saddle
|
6e569e25df
Advisor refinements: hidden tool bubbles, chattier prompt, reports in reach, parking guard
|
4 weeks ago |
saddle-Clanker-Saddle
|
2ff7e51e82
Centralise the canon and ethos on the web (goal 27)
|
4 weeks ago |
saddle-agent
|
6895c0802f
Add the discoveries knowledge base: storage, callback API, page and payload injection
|
4 weeks ago |
saddle-Clanker-Saddle
|
2a9f9cc504
Add the project Understanding storage, callback API and assignment injection
|
4 weeks ago |
saddle-Clanker-Saddle
|
5bc971af7b
Remove the web-side accept-time push gate from goal completion approval
|
1 month ago |
Billy Barrow
|
c52ce1f662
Probe recovery: an answered status probe must confirm the task, not the daemon
|
1 month ago |
saddle-Clanker-Saddle
|
0c0414d46c
Merge branch 'task/8-37' into goal/toto-batch-1
|
1 month ago |
saddle-Clanker-Saddle
|
daec26beb1
Per-saddle workspace roots: register handshake carries workspace_root, assignment paths follow the asking saddle
|
1 month ago |
saddle-Clanker-Saddle
|
71c595763b
Per-saddle prompt notes: column, admin editor, assignment carriage
|
1 month ago |
saddle-Clanker-Saddle
|
cfcf2dc92d
Standalone (no-project) tasks; comments resurrect terminal goals and plain tasks
|
1 month ago |
clanker
|
7007d4b94c
protocol-native integration pass: goal-era arc end to end against the real daemon — the harness speaks tool calls (mock script per §7 grammar: narrated probes, question via run_command's saddle block, submit_plan/create_task/enqueue+suspend, the worker's five identical probes tripping the loop warning, finish, the coalesced merge/push/submit_report resume) and asserts the ledger world (turn_text/tool_call/tool_result/usage events, §7.2 kind set, seq exactly-once on chunks, the event log page + SSE replay, tool results as role=tool turns, the retired results-entries array consumed silently); web fixes surfaced by the pass: a review-kind block push on a goal run routes to submit_completion (the daemon's submit_report done-park now reaches completion_review with its goal-scoped narrative row), the narrative derives block-raised from the run task's question/RFC raises, the U2 mechanical rows (session context restored, parked-until) persist as system comment events on resume/park with the goal thread filtered like the task page, and the replay bundle's remark query pins the model-actor row; integration 125/0, 13 bundles sequential 966/0
|
1 month ago |
clanker
|
d56d8e185a
Plan 17 M1+M2: consolidated M0001, unified events ledger, chunks ingestion
|
1 month ago |
clanker
|
cb269d0d30
r23: sessions as truth — the saddle-row work cache dies, IDLE/BUSY derive from open sessions
|
1 month ago |
clanker
|
db546c35a7
r23: D4 web half — parks close their session rows 'parked'
|
1 month ago |
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 month ago |
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 month ago |
clanker
|
a58d9c0738
r2: saddle-status + session-outcome constants, one bearer resolution (arch 26) — SADDLE_IDLE/BUSY/OFFLINE and OUTCOME_STOPPED/RESUMED/DONE/FAILED beside SaddleService replace the magic strings across SaddleService (register/list/park/free/offline writes incl. the guarded UPDATE SQL), TaskService (unreachable check, every release outcome), AllocationService (the claim's idle/busy/resumed), Dispatcher (the affine-wake idle check), SaddleApi (the offline->idle ask recovery, the legacy done outcome) and the four entrypoints' offline/idle guards; the {id}-anchored and id-less auth styles collapse into resolve_bearer (validate_token pinning the route's saddle vs saddle_for_token owning-whatever-registered) so every /api/saddle/* endpoint resolves its credential through one helper. No OUTCOME_PARKED: no web-side writer exists (D4's web half is unlanded) — an unused constant would be dead code; it lands with D4. The wire-state switch labels (daemon results states) and display labels stay literals by kind.
|
1 month ago |
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 month ago |
clanker
|
40508b0fa9
r1: current_work_view + direct display_map_for — SaddleService.current_work_view owns the current-task/goal resolution the dashboard's saddle cards and the saddles page duplicated; the goal page's task rows consume TaskService.display_map_for + the batch yeehaw set directly (the GoalTaskDisplay intermediate map and its double list_tasks_for_goal pass die).
|
1 month ago |
clanker
|
533278fa51
r1: delete_task/delete_task_rows dedup + terminal/park stamping centralised — the five-loop row teardown lives once in delete_task_rows (the human Delete and the goal cascade's quiet delete share it); mark_terminal owns the complete/fail/cancel status flip, completed_at stamp and summary precedence; set_parked owns the suspended+suspended_at stamp (the daemon's 'suspended' push calls it directly), all semantics byte-identical to the three inline copies.
|
1 month ago |
clanker
|
34f58415c3
r1: one JSON-entry reading surface — src/Json.vala grows EntryJson (string_member/optional_string_member/get_string_or/string_array_member/parse_iso/parse_string_array); SaddleService's four private statics, SaddleApi's get_string_or/parse_iso/string_options and TaskService.parse_block_options all collapse into it, three string-array parsers down to one, behaviour byte-identical (the malformed-options warning keeps each call site's wording).
|
1 month ago |
clanker
|
12de25e747
r1: one block-kind vocabulary — the GOAL_BLOCK_* duplicates die; every raise/adopt/render/narrative path (GoalService, SaddleService's ensure_block + rfc fallback, GoalDetailEntrypoint, GoalActions, PushService) reads the single BLOCK_QUESTION/RFC/REVIEW/PLAN/COMPLETION set from TaskService, including the raw 'review'/'completion' literals the completion-review detection leaned on.
|
1 month ago |
clanker
|
37508060cf
r1: dead code deletion — has_yeehaw (the batch yeehaw_task_ids/yeehaw_feed own every surface), SaddleService snippet_text + generate_token (mint_saddle_token is the live minter), the Saddle.container_id column (entity + flattened M0001, tear-down convention), the never-set 'recovering' branch of unreachable_task_ids, TaskDetailPublic plan/auto_approve/toggle_auto_approve, the duplicated hideQuoteUi in main.html (the activeHandler-clearing definition wins), and the malformed/duplicated docblocks (TaskService nested /**, the orphaned list_tasks header, the SaddleService /status orphan, the TasksEntrypoint double header). fail_goal's empty cascaded-if dies with the counter, the shared cascade_goal_tasks helper owning the cancel/fail task sweep.
|
1 month ago |
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 month ago |
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 month ago |
clanker
|
66a0fb85c4
qa: 'system' entry ingestion + integration_test.py re-baselined on the consolidated goal world — the daemon's harness-authored rows (session-restore footnote, goal park notice) ride the wire typed 'system' and author system comment rows on the ONE thread (never agent); the harness's arc now covers: commentary-only and trailing-comment rounds fed verbatim with their receipts reaching the model, the degenerate repetition validator-caught cross-binary (one rejected entry, never executed, clean resend completes), the terminal watermark advancing past the worker's transition, the derived narrative's system rows, live push chips and the accept-refuses-while-origin-is-behind gate (rewind -> refuses with the clear message, goal stays in review, re-push -> chip restores, accept passes). 83 -> 100 checks, green end-to-end against both real binaries
|
1 month ago |
clanker
|
3aadf3b00c
C4: goal page batch — head line, expanders, live push flags, accept gate (F9)
|
1 month ago |
clanker
|
e2a11c459d
C3: goal_events deleted — terminal watermark + derived narrative
|
1 month ago |