Repository navigation
Fix Workflow UI: live run controls and short task summaries - #1456
Merged
Merged
Conversation
Fixes #1454 Docs-not-needed: @flybot/workflow client and service only; no subsystem doc change. Sidebar preview and stage run come from displayRun (live runs only), not the seeded demo script. Pause/resume endpoints gate hand-off dispatch. Chat and cards use summarizeTask and chatPreview truncation. Co-authored-by: Danyang Chen <birfychen@gmail.com>
Never expose demos in preview/run; runningOf requires live=true. Client sidebar ignores stale busy preview. demoStep returns demo field only. Co-authored-by: Danyang Chen <birfychen@gmail.com>
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 27, 2026
Template catalog ids no longer block rename/delete or context menu. Portal context menu; delete cleans lanes/demos and releases live Bots. Co-authored-by: Danyang Chen <birfychen@gmail.com>
Co-authored-by: Danyang Chen <birfychen@gmail.com>
Drop demos[], seeded runs, and workflow/demo-step. Fresh and migrated stores expose only live Bot-gated runs. purgeDemos strips legacy demos on load. Docs and tests follow. Co-authored-by: Danyang Chen <birfychen@gmail.com>
Collaborator
Author
|
Verdict: PASS at 90af4a1 Ran:
Not run:
Findings: No actionable defects for #1454 scope. Demo store and demo-step removed; workflow/state preview/run are live-only. Factory-id rows including delivery are rename/delete-able. Pause/resume and short summaries covered by tests. docs/subsystems/workflow.md matches behavior. Security fence / remote-string surface unchanged. This is not merge authority; gating agent enqueues after guard green. |
This was referenced Oct 27, 2026
HugoXK
pushed a commit
to HugoXK/FlyBot
that referenced
this pull request
Oct 27, 2026
ThinkFlowLab#1418) (ThinkFlowLab#1422) Fixes ThinkFlowLab#1418 Owner: Chief Written-by: Dev3 Reviewer: Reviewer Tip SHA: `7c27a23b1eef6099432f632eb0753918aa1d80fe` Base: `5c1fb1644808b7f8257b64ed030a9934fa6d7950` ## Base moved: replayed onto `5c1fb164` The branch was reviewed at `fe62ca8c` (on `5daf756b`). `main` then moved twice — to `8f5c9ca7` (ThinkFlowLab#1440, Settings → Workflow graphs) and to `5c1fb164` (ThinkFlowLab#1452/ThinkFlowLab#1456, Workflow UI) — and none of those commits touches the three files this pull request changes. The change was therefore replayed on top of the live base instead of stacked on an old one: one commit, parent `5c1fb164`, and the same three blobs — `5c5d2254` (script), `1f6fd724` (tests), `bc7bf331` (changelog) at `fe62ca8c`, `d9eab4b8` and `7c27a23b1eef6099432f632eb0753918aa1d80fe` — so the change set did not move: `GET /compare/5c1fb164...dev3/1418-label-hygiene-resilient-apply` lists only those three files. The PASS at `fe62ca8c` does **not** carry to this head, and the reason is mechanical rather than a defect in the diff: it is a `Birfy`-login conclusion, so it owes an `Attestation:` line, and that line names `fe62ca8c`. A moved tip therefore needs a fresh PASS at the new tip; until it lands, this head cannot enqueue. ## What changed **Before:** the per-label DELETE ran in a bare loop and the first throw escaped `main()`. Both live runs on `7a4fa61e` stopped at item 1 — `ThinkFlowLab#1356` in `40485666850`, `ThinkFlowLab#1359` in `122128075345` — printed `gh: Validation Failed (HTTP 422)` and `##[error]Process completed with exit code 1`, leaving 16–18 items untouched and no `after:` line. Nothing distinguished a refused request from a label that was already gone. **After:** each removal stands on its own. A `(HTTP 404)` (the label was gone before the call) is the only skip, logged as `label-hygiene: skip #N <name>: already gone`. Every other answer — including the `422` the live runs got, where the label was still on the item afterwards — is recorded as `failed` with the `gh` status line **and the JSON response body `gh` printed to stdout**, logged as `label-hygiene: FAILED #N <name>: <reason>`, and the sweep keeps going. The collected failures are printed as a `label-hygiene: FAILED:` summary **before** the read-back, so the line survives the normal case where the refused label is still on the item. The read-back (`after:`/`STILL STALE`) still decides the stale half, a recorded write failure keeps the run non-zero, and a clean board with only 404 skips exits 0. The dry run, `STALE_LABELS`, the keep-list and the workflow triggers are unchanged. `422` is deliberately **not** folded into "already gone". On `ThinkFlowLab#1359` the label `agent-pr` was present when the DELETE answered `422` and stayed until another call removed it at `10:23Z`, and the same DELETE through the Bot PAT answered `200` — so this diff reports the refusal instead of masking it. ## Verification at the tip Tip SHA: `7c27a23b1eef6099432f632eb0753918aa1d80fe` Ran at this tip (2026-10-27T14:20Z, a tarball of `7c27a23b` unpacked outside the checkout): - `node --test .github/scripts/label-hygiene.test.mjs` → `# tests 13 / # pass 13 / # fail 0`. - `node --test ".github/scripts/*.test.mjs"` → `# tests 543 / # pass 541 / # fail 0 / # skipped 2`. - `node .github/scripts/changelog.mjs check` → `changelog: 23 fragment(s) in changelog.d/ are well formed`, exit 0. - Red-first: with only `.github/scripts/label-hygiene.mjs` reverted to `main`'s blob `114f37ac` (`5c1fb164`) and the new tests kept, `not ok 11` (422), `not ok 12` (404) and `not ok 13` (500) fail, `# pass 10 / # fail 3`; each dies because the raw `gh:` error escapes `main()` and the item behind it is never touched. Restoring the tip blob (`cmp` against `5c5d2254`) returns `13/13`. - `GET /compare/5c1fb164...dev3/1418-label-hygiene-resilient-apply` → `status ahead`, `ahead_by 1`, exactly the three files above; `GET /commits/7c27a23b` → one parent, `5c1fb164`. Not run (and why): - The live close-event acceptance (close a throwaway item carrying `agent-working`, see `after: 0 item(s)`, exit 0) needs the new script on `main`: the workflow always runs base's `.github/scripts`. It runs right after merge. - `npm run verify`, the `core` suite and `ds-bot-patches check`: this branch touches no `core/`, `patches/ds-bot/` or client bundle. - No browser bench or smoke test: no UI, host wiring or client code changed. ## Risk Low and script-local, but it does not hide the remaining cause. A `422` on an installation token still leaves its label on the item, so after this merges the sweep will finish all items and then stay red with `FAILED:` and `STILL STALE:` naming exactly those labels, instead of dying silently at item 1. That is the intended, readable failure; the credential/route cause of the `422` needs its own evidence (a live run with the body printed) and is not fixed here. No new permission, config key or trigger; the keep-list and `STALE_LABELS` are untouched, and a genuinely stale label still cannot pass. ## Checkpoint <!-- flybot:checkpoint --> { "pr": 1422, "claim": "Chief", "issue": 1418, "summary": "One label that cannot be removed no longer abandons the label-hygiene sweep. A 404 means the label was already gone and is skipped; every other refusal, including the live 422 that left the label on ThinkFlowLab#1359, is recorded with the response body and the remaining items are still cleaned. The failed summary is printed before the read-back, which stays the criterion, and a real write failure keeps the run non-zero. The dry run, the keep-list and the workflow triggers are unchanged.", "files": [ ".github/scripts/label-hygiene.mjs", ".github/scripts/label-hygiene.test.mjs", "changelog.d/1418-label-hygiene-resilient-apply.fixed.md" ], "checks": { "ran": "node --test .github/scripts/label-hygiene.test.mjs; node --test .github/scripts/*.test.mjs; node .github/scripts/changelog.mjs check", "result": "green", "at": "7c27a23b1eef6099432f632eb0753918aa1d80fe" }, "next": "PASS at 7c27a23 (Attestation 7c27a23, Reviewer); enqueue and merge, then the live close-event acceptance runs on the merged workflow. The 422 root cause is out of scope (reported with its body, run stays red and names it)." } <!-- /flybot:checkpoint -->
Birfy
added a commit
that referenced
this pull request
Oct 28, 2026
CHAT_PREVIEW (240) and chatPreview() clipped every stage chat message, so the owner's brief and each narrate line that quotes a Bot reply lost its tail and the rest was unreachable (regression from #1456). Render message.text in the system, user and Bot bubbles again, keep #1473's title and word-wrap, and keep the 240-character cap on taskSummary, which is the summary surface. Fixes #1460 Docs-not-needed: display-only restore of text that the stage chat already receives; docs/subsystems/workflow.md describes the message flow, not the truncation, and no flow or API changes.
HugoXK
pushed a commit
to HugoXK/FlyBot
that referenced
this pull request
Oct 28, 2026
Fixes ThinkFlowLab#1460 Owner: Chief Reviewer: Reviewer Written-by: Dev Tip SHA: `e76c222626f2d4320edb475ec41b071c60148d14` Base: `fe6c90693f5ff32c1147d0b618041b1acaaa0d76` — live `main` at claim time. ## What changed Every Workflow stage chat line was clipped at 240 characters ending in `…`: `Bubble` ran the `system`, `user` and Bot branches through `chatPreview()` (`plugins/workflow/client.js:428`, `:429`, `:435`). An owner brief and each narrate line that quotes a Bot reply lost its tail, and after ThinkFlowLab#1452 those narrate lines are the only place a node's words appear. The same line rendered in full before ThinkFlowLab#1456, so this is a regression; ThinkFlowLab#1473's `title` only made the tail reachable on hover. - `Bubble` renders `message.text` for the `system`, `user` and `bot` branches again; the `title` prop and ThinkFlowLab#1473's word-wrap stay. - `CHAT_PREVIEW` and `chatPreview()` are deleted, including the export (a repo-wide search found no other caller); the 240-character cap stays on `taskSummary()`, the summary surface. - `changelog.d/1460.fixed.md` added. ## Verification at the tip Tip SHA: `e76c222626f2d4320edb475ec41b071c60148d14` Ran: - At base `fe6c9069` with only the new tests copied in (source: base blob `7e678c82e26cc9bf0bdfbe2e09d1939c705920b8`): `node --test test/client.test.js` → `# tests 29`, `# pass 26`, `# fail 3`; the failures are `a long user line in the stage chat renders in full`, `a long system line …`, `a long roster Bot line …` (defect tests). At the tip: 29/29. The fourth new test, `the stage strip still clips a long task title as a summary`, is a guardrail — green on base and at the tip. - `npm --prefix plugins/workflow test` → 89/89 pass (base 85 + 4 new). - `npm --prefix plugins/social test` → 525/525; `tree` → 125/125; `timeline` → 125/125. - `node --test ".github/scripts/*.test.mjs"` → 543 tests, 541 pass, 0 fail, 2 skipped. - `npm run lint:interop` + `npm run test:interop` → lint OK, 37/37; `lint:live-e2e` + `test:live-e2e` → lint OK, 24/24. - `node core/scripts/build-client.mjs --check` → pass; `node scripts/ds-bot-patches.mjs check` → `ok 10 patches apply cleanly in order`, `ok core/ equals ds-bot/ + patches/ds-bot/` (`skipped pin (no git)`). - `node core/scripts/lint.mjs` → oxlint `62 warnings and 0 errors`; `node scripts/lint-plugins.mjs` → `6 warnings and 0 errors`, `packed @flybot/workflow imported`. Not run (and why): - `TZ=UTC npm run verify` as one command: this box has no `git` binary, so `check-arch-docs.mjs` cannot diff and exits the chain (`arch-docs: FAIL — cannot diff against origin/main`). Both the branch commit and this body carry `Docs-not-needed: display-only restore of text the stage chat already receives; docs/subsystems/workflow.md describes the message flow, not the truncation.` - The `core` suite: run separately; it is not touched by this diff and its result is in the review thread (CI runs it in full). - The smoke test (no `index.js` or `core/src/host/` change) and the CI-only `package` job. ## Risk T2: `plugins/workflow/client.js` matches `plugins/**`; the test file and the changelog fragment are T1. No `risk:T*` label is hand-set — the tier comes from `risk-gate` on the diff. T2 needs a PASS at this tip plus green CI; nothing is enqueued by this node. Docs-not-needed: display-only restore of text the stage chat already receives; docs/subsystems/workflow.md describes the message flow, not the truncation. ## Checkpoint <!-- flybot:checkpoint --> ```json { "pr": 1510, "claim": "Chief", "issue": 1460, "summary": "The Workflow stage chat renders every message line in full again: the system, user and Bot bubbles no longer pass message.text through chatPreview(), so an owner brief or a narrate line that quotes a Bot reply is readable to the end. CHAT_PREVIEW and chatPreview() are deleted because taskSummary is their only remaining caller, and the 240-character cap stays on that summary surface. The title tooltip and word-wrap are kept. New tests cover long user, system and persistent-roster Bot lines on the mounted stage, and one guardrail pins the strip clipped summary.", "files": ["plugins/workflow/client.js", "plugins/workflow/test/client.test.js", "changelog.d/1460.fixed.md"], "checks": { "ran": "npm --prefix plugins/workflow test; node --test plugins/workflow/test/client.test.js at base and tip; plugins social/tree/timeline, .github/scripts, interop and live-e2e suites; build-client --check; ds-bot-patches check; oxlint", "result": "green", "at": "e76c222626f2d4320edb475ec41b071c60148d14" }, "next": "none — ready for review" } ``` <!-- /flybot:checkpoint -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Owner: Dev
Reviewer: Reviewer
Fixes #1454
Summary
state.demos[],workflow/demo-step, and seeded busy state. Default store ships empty lanes only;purgeDemos()strips legacydemoson load.workflow/statepreview and stage use live runs only (live === true).workflow/deleteand sidebar Delete+confirm work fordelivery/ 发布交付流水线 (no factory preset guard).docs/subsystems/workflow.mdupdated for the above.Verification
Tip SHA:
90af4a12db7a4d00e39148ad5f76ffe005fc4a2dRan:
PATH=/workspace/tools/node24/bin:$PATH TZ=UTC npm run verify— green.Not run: prod FlyBotDebugger re-check (needs merge deploy).
{"pr":1456,"claim":"Dev","issue":1454,"summary":"Removed demos[] and demo-step; only live Bot runs appear in workflow/state. Delivery and other factory-id sidebar rows are deletable. Subsystem doc updated.","files":["plugins/workflow/src/service.js","plugins/workflow/index.js","plugins/workflow/test/","docs/subsystems/workflow.md","changelog.d/1454.fixed.md"],"checks":{"ran":"npm run verify","result":"green","at":"90af4a12db7a4d00e39148ad5f76ffe005fc4a2d"},"next":"none — ready for review"}