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 |