Commit History

Autor SHA1 Mensaxe Data
  clanker 3586d8731e Goals bundle: read plan revisions newest-first hai 1 mes
  clanker 913b071030 README: name the thirteen suite bundles hai 1 mes
  clanker 37c5e22801 README: document goal-2 QoL features and Force Wake hai 1 mes
  clanker d069aa9c01 Goals bundle: assert the current plain nav markup hai 1 mes
  clanker ad36962388 Force Wake tests: dedicated forcewake bundle + order registration hai 1 mes
  clanker 4a528f3975 Force Wake: human-triggered resume of parked tasks and goals hai 1 mes
  clanker 93412406ec Task and goal mutations answer with refreshed state slots hai 1 mes
  clanker 2d7526ff96 Dashboard Queue metric reflects waiting-for-attention work hai 1 mes
  clanker eab12d11a0 Saddles page: lift SSH key text colour for dark-panel contrast hai 1 mes
  clanker 0ce0a4d1ef Merge branch 'task/2-13' into goal/selfhosted-qol hai 1 mes
  clanker c4c089b4d7 Notifications: per-browser bell, truthful delivery, test button hai 1 mes
  clanker 480bf3f463 README: in-place mandate/brief editors hai 1 mes
  clanker 3785e9f562 In-place Edit buttons for task mandate and goal brief hai 1 mes
  clanker eecfd99347 Merge branch 'task/2-11' into goal/selfhosted-qol hai 1 mes
  clanker 73dcec9314 List UX: newest-first tables, New task expander above the queue hai 1 mes
  clanker ab36581e73 README: users/roles/profile section hai 1 mes
  clanker cc160d76e3 Users page, profile page, role gates (admin-gated user/saddle/capability management) hai 1 mes
  clanker ed23852973 docs: the daemon deploy snippet carries --spm dnf hai 1 mes
  clanker 692eaebca2 docs: deployment leverages spry deploy / usm manifest deploy from the repo checkouts (no outside-repo Dockerfiles); extension guide cross-referenced hai 1 mes
  Billy Barrow 5eaab318c6 navbar hai 1 mes
  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) hai 1 mes
  Billy Barrow 21510cee71 Add assets hai 1 mes
  clanker 903361929c qa: integration_test re-baselined onto the post-R3 world — the harness left behind by the R stages (75 passes + stale) is green again end-to-end against both real binaries, twice on fresh environments: 114/0 (was 100 checks pre-R3). hai 1 mes
  clanker cb269d0d30 r23: sessions as truth — the saddle-row work cache dies, IDLE/BUSY derive from open sessions hai 1 mes
  clanker db546c35a7 r23: D4 web half — parks close their session rows 'parked' hai 1 mes
  clanker 181fbd9926 r3: doc residue — the PendingAnswer docblock still linked the deleted SaddlePollEndpoint; it points at the SaddlePollState ledger now. (The goal page's own is_plan_review flag is GoalDetailEntrypoint's GoalBlockView member — live, not the deleted task-page BlockView twin.) hai 1 mes
  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. hai 1 mes
  clanker bf9009c91b r3: template partials (arch 16) — Statum DOES support includes (the mkpstm fragment pass: pstm-fragment with pstm-input parameters and pstm-materialise-as tag carry), so the partial strategy is compile-time fragments, not JS extraction. Five new partials in src/pages (auto-discovered, wired into template_deps): goal-branches (the branch chips paragraph, included 3x from goal_detail — head passes its note via the optional input, the note span hides where undefined), goal-compare (the Compare changes link, 2x), progress-feed (the latest+history card body shared between task and goal pages, parameterised on entries — heading and empty-state note stay per page with their page-specific wording), block-answer (the option-card question form — radio options + Other, shared between both pages' block loops; both loops expose the block as 'block' so no inputs), and block-reply (the free-text RFC reply form, shared likewise). The goal page's select+textarea answer form unifies onto the task page's richer option-card shape (the U1-pinned one): AnswerGoalBlockAction gains the __other__ resolution the task action already had, so a picked radio posts option=<value> exactly like the old select and the Other row carries the free text — the goal questions stay answerable with and without options. The goal page also gains the RFC reply fallback the task page already had (its old single form covered rfc blocks implicitly). Compiled-page inspection pins the composition: chips wrappers carry stm-if + the note def, no pstm-* residue. 851 checks. hai 1 mes
  clanker e578a698f5 r3: shared plan-review JS (arch 15) — one parameterised initPlanReviews in main.html. The ~180-line collect-remarks pattern (the per-block remark queue, the plan-popover, the numbered rejection body with quote-prefixed remarks, accept-clears-queue, remark-less rejection via the feedback textarea, syncPlanRemarks on afterEvaluate) moves verbatim into main.html as the shared engine; the page passes only resolveBlock(id). goal_detail.html keeps the resolution (resolveReviewBlock over goal.open_blocks + plan_pending_block — the S2 completion-review deep-link semantics) and registers. The task-page twin of the pattern died with the poll era in the arch-19 commit (the plain-task plan review was unreachable), so the duplication the review flagged is gone at the source: the engine lives once, asserted identifiers (remarksByBlock, rejectOpenByBlock, syncPlanRemarks, plan-popover, the numbered (index + 1) + '. ' body) all preserved on the composed goal page — the goalui S2/S3 pins pass unchanged. 851 checks. hai 1 mes
  clanker 13d283c0a6 r3: query layer (arch 14) — the work moves into the ORM with identical results. list_tasks filters (status/project) and sorts (priority, created_at — DateTime columns are unix-epoch ints, so the SQL ORDER BY equals the old .to_unix() compare) inside the query; get_ready_tasks stops loading EVERY task row for predecessor checks and queries only the queued candidates' predecessors; unreachable_task_ids batches (candidate tasks once, their sessions in one id-filtered query, the saddles in another — the newest-open-session-per-task semantics preserved by an id-ordered backward walk); display_map_for loads the wanted tasks' blocks in ONE task_id-filtered query instead of three full-table scans filtered in Vala; TasksState.build materialises the task list ONCE (the triple list_tasks died); TaskDetailState's enqueue dropdown queries exactly the standalone rows it lists (new list_standalone_tasks) instead of every task on every pulse; TimelineService.recent_window stops loading every session twice — the yeehaw session->task map builds from a batched lookup of only the WINDOW newest entries' sessions. The batched WHERE-in is an OR-chain helper (id_in/id_filter) because the expression grammar has no IN operator; id batches carry decimal strings (the Invercargill collections mishandle boxed value types — an int64 vector through to_immutable_buffer corrupts the heap, the exact trap the CreateTaskAction comment warns about). 851 checks, unchanged. hai 1 mes