clanker
|
4a528f3975
Force Wake: human-triggered resume of parked tasks and goals
|
1 mese fa |
clanker
|
0ce0a4d1ef
Merge branch 'task/2-13' into goal/selfhosted-qol
|
1 mese fa |
clanker
|
c4c089b4d7
Notifications: per-browser bell, truthful delivery, test button
|
1 mese fa |
clanker
|
3785e9f562
In-place Edit buttons for task mandate and goal brief
|
1 mese fa |
clanker
|
cc160d76e3
Users page, profile page, role gates (admin-gated user/saddle/capability management)
|
1 mese fa |
clanker
|
b1176f3cf8
ui+docs: clanker-saddle favicon + touch-icon, emblem beside the heading; READMEs swept for the plan-16 world (single-row blocks, parked outcomes, derived saddle state, no subtask/legacy-wire remnants, 924-check count)
|
1 mese fa |
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 mese fa |
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 mese fa |
clanker
|
acf1fcbe43
r2: LifecycleService owns the six cancel/retry/requeue orchestrations (arch 11) — TaskService+SaddleService+GoalService injected, no cycle; CancelTask/RetryTask/ResumeTask and CancelGoal/RetryGoalRun/RequeueGoalRun become thin auth+validation+notify wrappers delegating to it, the abort-before-mutate ordering and the abort failure contract (mark saddle offline, still proceed) living once in the service docblock+paths; RetryGoalRunAction's direct db.update_async<Goal> writes move into GoalService.retry_goal (goal revives active, completed_at withdrawn — no pulse added, matching the old action's write set).
|
1 mese fa |
clanker
|
2cbcc8862f
qa: sqlite WAL + busy timeout on the singleton connection — a SELECT stepping against the harness's concurrent fixture write returned SQLITE_BUSY, which the ORM's lazy enumerator reports as end-of-rows (the lifecycle flake: task_state capabilities read back EMPTY though the row existed; Invercargill-Sql's SqliteResultEnumerable treats any non-ROW step as done). WAL readers never block writers and never are blocked by them; the 5s busy timeout absorbs the remaining writer-writer window
|
1 mese fa |
clanker
|
e2a11c459d
C3: goal_events deleted — terminal watermark + derived narrative
|
1 mese fa |
clanker
|
e7e167579f
C2: goal comments ride the run task; system events styled (F8)
|
1 mese fa |
clanker
|
d1c8bea7e2
C1: goal blocks ride the run task — one row, one answer path (F6)
|
1 mese fa |
clanker
|
e9b8fc1064
B1: goal-run control parity — Retry supervision, Requeue-to-resume, /tasks redirect
|
1 mese fa |
clanker
|
9bca970531
replay: daemon-global entry dedup — ingestion keys on (saddle, entry id)
|
1 mese fa |
clanker
|
fa78f8a5bf
goals: flatten — subtask web machinery and task plans deleted
|
1 mese fa |
clanker
|
4bc3e61edb
goals: web UI — pile, timeline, queue filters, task page, carried fixes
|
1 mese fa |
clanker
|
44f2e66a5a
goals: schema, lifecycle service, wire contract and task callbacks
|
1 mese fa |
clanker
|
9f5ab7ab36
push: plan 11 task E — real Web Push (VAPID) notifications
|
1 mese fa |
clanker
|
b397745530
lifecycle: draft state machine on a flattened M0001 — enqueue/delete guards, edit matrix, auto-enqueue subtasks, waiting-on-drafts display
|
1 mese fa |
clanker
|
16ea23f919
phase 3: capability awareness + dashboard — assignment capabilities context (saddle_tags/fleet_tags), GET /api/saddle/capabilities for the daemon CLI, subtask callback capabilities validated against the operator tag set (explicit-only, unknown tags name the valid list), task page status block pinned to the top with newest-first blocking sections, home dashboard pinning OPEN blocks as newest-first link-through cards above a cross-task activity timeline (TimelineService, last ~50 events), slow-ask lost-wake regression; tracked test bytecode removed
|
1 mese fa |
clanker
|
1568628f4e
phase 2: telemetry flip — pushed chunks/results ingestion, staleness probe, pollers retired
|
1 mese fa |
clanker
|
2a8a2ec4b0
phase 1: work acquisition flip — ask/allocation, per-saddle tokens, wake computation + lost-wake guard
|
1 mese fa |
clanker
|
32a9554c9d
feat: per-saddle git identity + ssh key storage — migration (git_name, git_email, ssh_public_key), poller and refresh persist the daemon-reported ssh_public_key, saddles page shows the key (copy button, deploy-key hint) with an inline identity edit form
|
1 mese fa |
clanker
|
7c2b3e00b5
feat: task-reading API for the daemon CLIs — GET /api/saddle/tasks (project_id filter, q over title/description/plan) and GET /api/saddle/task/{id} (parent title joined), callback-token authenticated; harness pins LD_LIBRARY_PATH empty so the binary's RUNPATH always resolves the dev stack
|
1 mese fa |
clanker
|
e561f584c3
feat: subtask auto-approve — tasks.auto_approve toggle above the subtasks table covers descendants transitively; covered review blocks auto-answered ('auto' recorded, timeline entry, delivered like a human verdict) while questions/RFCs and the parent's own review stay human-gated; all-terminal descendants resume with the push-first final-review instruction
|
1 mese fa |
clanker
|
7625609d95
feat: POST /api/saddle/subtask callback — synchronous subtask creation (parent's project/branch, task_dependencies with exists+ancestor-cycle validation, timeline entry, idempotent on parent+title); entry-poll creation kept as dedup fallback
|
1 mese fa |
clanker
|
55848be0b3
feat: subtask status push — POST /subtask-status to the parent's live/parked-session daemon on creation and every status change, coalescing best-effort queue retried per tick (mirrors pending comments)
|
1 mese fa |
clanker
|
0614417826
feat: suspended state + per-subtask parent resume — /status 'suspended' parks the task and frees the saddle (suspended_at stamps the parking window), the dispatcher resumes a suspended parent on each terminal subtask event with a coalesced markdown report as /start resume_notice, subtasks array in every /start payload (wire contract)
|
1 mese fa |
clanker
|
2a17623f47
feat: retry + resume — failed-task retry (summary moved to a comment and cleared, requeue bookkeeping), unreachable saddles requeue with an interruption comment, manual requeue-to-resume for tasks stuck on offline saddles, daemon 'resumed' status surfaced as a progress entry
|
1 mese fa |