Skip to content

merge: bring the board's deliveries into master - #16

Merged
Tevin2119 merged 19 commits into
masterfrom
merge/board-deliveries
Oct 7, 2026
Merged

Tevin2119 merged 19 commits into
masterfrom
merge/board-deliveries

Conversation

@Tevin2119

Copy link
Copy Markdown
Owner

The engine's T3 board delivers into fix/mobile-board-exit, but T3 runs from master. So seven tasks the board delivered and merged never reached the running app:

This PR merges fix/mobile-board-exit into master; fix/mobile-board-exit itself is not pushed. The only conflicts were in two test files where both sides added tests, and both sides are kept.

Verified:

  • apps/web typechecks.
  • The delivery tests in src/lib, src/state/delivery* and src/components/delivery pass: 694.

After this, the board's T3 base should be master, so future deliveries land where the app runs.

🤖 Generated with Claude Code

delivery engine and others added 19 commits October 4, 2026 11:58
…am chosen

A new plain-harness thread now starts with No team and sends as an ordinary thread; the last team chosen is remembered per environment in the existing persisted draft store (same key and version) and new threads start from it. A remembered team that is no longer offered resolves to No team for plain threads and to development for Orchestrator mode, only once the team list has loaded. Picker, footer and send share one resolver and one triage-filtered team list. The picker shows blocking reasons as visible text. Orchestrator enter starts from the remembered team else development, reconciles once when the list loads, and guards Save and Start until then; explicit Orchestrator picks are remembered. Seat takeover logic moved unchanged into the new useDraftTeamPicker hook. Web changed; desktop inherits via the shared web UI; mobile has no team picker and is unchanged. Codex, Claude, OpenCode, Pi, Kimi, Hermes and DeepSeek go through the existing harness mapping; Cursor, Grok and Antigravity stay ordinary threads with explicit unsupported-team feedback.

Task task-ddca8decf4, revision 4, run run-961ba38e76.
…am chosen

Removed duplicated defaults from the picker test render helper while preserving accumulated partial overrides, strict types and all assertions.

Task task-ddca8decf4, revision 6, run run-8c4f1a027c.
…read-starts-with-no-te-8c4f1a027c

pingdotgg#1001 A plain-harness thread starts with No team, and remembers the last team chosen
…not offered

Fixed Orchestrator fallback to use offered teams and added loaded-list availability guards, visible messages, and regression tests.

Task task-9169e8495d, revision 2, run run-7cc819d450.
…not offered

Repaired the typecheck blocker by removing duplicate defaults from the picker test render helper. Retained the existing Orchestrator fallback implementation.

Task task-9169e8495d, revision 2, run run-7cc819d450.
Added an attention badge to the Board sidebar item. A pure helper (boardAttentionCount) counts cards only in the needs-decision and human-review lanes and returns null for readings it cannot trust. A new hook (useBoardAttention) reads the fixed path /api/lanes?view=development&set=all for the primary environment every 15000 ms through useDeliveryRead, keeps the last valid count through failed or malformed refreshes for the same environment, and goes to unknown when delivery is off, the environment disconnects, or the environment changes. SidebarUtilityItem takes an optional badge count, supplied only for Board, drawn as an aria-hidden, non-animated element inside the item's existing footprint; the count is also in the button's aria-label and tooltip. Endpoint readings were attached as evidence.

Task task-820b4cc07e, revision 2, run run-15ebfccf0b.
Addressed the four review points on the Board attention badge. (1) Attached authoritative endpoint evidence from the engine source and a live reading: /api/lanes?view=development&set=all has no pagination or limit, the development view keeps every card, set=all includes qualification tasks by contract (disclosed, not filtered), and both target lanes are always listed. (2) boardAttentionCount now rejects readings where any card is not a record, so cards:[null] is unknown rather than zero. (3) useBoardAttention starts over on every environment change and does not count the reading at hand at that moment, so A positive -> B unknown -> A stays unknown until a fresh reading. (4) useBoardAttention takes a connected input, supplied by SidebarChrome from the primary environment's connection phase; while disconnected nothing is read and the count is unknown even with delivery enabled, and on reconnect only a new reading is shown. Tests added for each and mutation-checked.

Task task-820b4cc07e, revision 2, run run-15ebfccf0b.
…ppear

reconcileTeam now leaves an awaiting draft without an engine thread untouched (same state object) on an empty team list, so it settles on the first non-empty list: current team if offered, else development, else the first team. Engine-backed awaiting drafts still settle immediately on an empty list, and chooseTeam and settle-once are unchanged. In the controls, 'No teams are available to choose from.' now shows whenever the list is loaded and empty and takes precedence over 'Teams are still loading.' in blocked, onSave and the Save tooltip; the unavailable-team message stays gated on settlement. Tests encoding the old behaviour were rewritten and store and component tests for the empty-then-non-empty sequence were added.

Task task-851d1c1114, revision 2, run run-4b7a52aea4.
…falls-back-to-developm-7cc819d450

pingdotgg#1014 Orchestrator mode falls back to development even when development is not offered
…m-read-blocks-later-au-4b7a52aea4

pingdotgg#1038 An empty first team read blocks later automatic settling when teams appear
…-component-15ebfccf0b

pingdotgg#1030 Locate Kanban Icon Component
boardAttentionCount now returns null unless each attention lane ('needs-decision', 'human-review') is listed exactly once, so a duplicated lane is no longer summed twice. useBoardAttention now stores every fresh answer's count including null, so a malformed answer clears the sidebar Board badge instead of keeping the last number; transport failures still keep the current count (null after a malformed answer) and environment isolation is unchanged. Tests added for duplicated lanes in the helper and the hook; three existing hook expectations flipped to null and one test renamed, as planned.

Task task-7c43415dc1, revision 2, run run-9775c43c56.
Addressed the lead's review. useBoardAttention now identifies a reading by its body together with its readAt time instead of by body alone, so a fresh successful answer whose body is null is distinguished from an absent or old reading and clears the count rather than keeping an earlier positive one. Transport-failure retention (null stays null after a malformed answer) and environment isolation are preserved. Added a hook test for valid positive -> successful null body -> transport failure -> valid recovery, expecting null after both the null answer and the failure; it fails against the previous hook (expected 3 to be null) and passes now. The duplicate-lane rejection in boardAttentionCount and its tests from the previous round are unchanged.

Task task-7c43415dc1, revision 2, run run-9775c43c56.
…uring the pending phase

The 'Teams are still loading.' notice is no longer stored in problems. The component records which thread's save or start was refused for loading and shows the notice only while that thread's draft is still blocked by loading (awaiting teams, environment connected, no read error, no availability reason). It therefore disappears when teams load, gives way to the empty-list message or a read error, and is not brought back by a later refresh. Engine problems are still kept until the next save or start attempt and are never classified by text. One alert span, same wording, same precedence. Nine new test cases cover both requestStart and requestSave; the ten existing tests are unchanged.

Task task-7551d03f55, revision 3, run run-8bc6813438.
Preserved the Save draft block when a failed teams reading retains a list missing the settled chosen team. Added focused rule and interactive regression tests for new and saved drafts, empty-list precedence, unchanged failure behavior, and recovery without replaying blocked requests.

Task task-8a53ca9f8c, revision 2, run run-f1aab4eb94.
…tion-lane-in-the-engin-9775c43c56

pingdotgg#1044 A duplicated attention lane in the engine's answer is summed twice
…ill-loading-status-ale-8bc6813438

pingdotgg#1046 Stale 'Teams are still loading.' status alert after a blocked press during the pending phase
…ading-lifts-the-block-o-f1aab4eb94

pingdotgg#1072 A failed teams reading lifts the block on Save draft
…aster

The engine's T3 board delivers into fix/mobile-board-exit, so seven
delivered tasks (pingdotgg#1001, pingdotgg#1014, pingdotgg#1030, pingdotgg#1038, pingdotgg#1044, pingdotgg#1046, pingdotgg#1072) never
reached master, which is what T3 is run from. Both sides added tests in
the same two files; both are kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tevin2119
Tevin2119 merged commit 15383a9 into master Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants