Repository navigation
Conversation
✅ Deploy Preview for spectacular-cobbler-f6c85b ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Users keep operational views as .pulse/boards/*.board.json in the repository. The Boards view lists them, a panel renders counter, instanceList and incidentSummary widgets across the board's engines, keeps every row and number with its engine, isolates an engine that fails, and reloads on save. A JSON schema validates the files in the editor; a broken file names each problem with its path and reason. Refs #455
The board counts every version of a process, the definition panel shows one version at a time. The tooltips say where a click lands, and the sandbox board names its incident widgets after what they count. Refs #455
- restore the vendored token files a formatter run had changed - refuse an engine named twice and an instance list without columns - keep the latest valid board when an older read answers last - open a process only with a filter the definition panel can show and the shown board offers; key definition panels by scope and key too - say which engines crossed a threshold, colour incident counts as incidents, and show "not read" instead of disabled buttons - never let New Board overwrite a board - one label per action, labelled sections and Ctrl/Cmd hints Refs #455
The instance list of a board offered Copy, but the board panel ignored the copy intent. BoardNavigation now carries it to the clipboard.
Two widgets that need no contract change: - processDiagram draws the latest deployed version of one process on one engine with the running and incident badges of the definition panel; a count opens that panel at the element. - incidentList lists the first 50 open incidents of each engine with element and message, optionally of one process, and says when more are open. The badges move into ElementBadges so the definition panel and the board draw them alike. The sandbox gets an Order fulfillment board, and the screenshots 44 and 45 show it.
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.
Why
Pulse for VS Code only has fixed screens, so teams can neither keep nor share the operational questions they ask again and again (orders waiting at a step, incidents across their processes, running instances of a process). Boards let a team keep these views as JSON files in the repository and read them across several engines. The format, the name and the scope come from a consensus of five reviews (architecture, ops on call, process developer, monorepo maintainer, UX), recorded in
apps/vscode/docs/adr/boards.md.What
.pulse/boards/*.board.json, parsed by hand inapps/vscode/src/core/boards(BoardParser):title,engines(profile names of.pulse-cli.json), androwsof{ "row": [{ "widget", "props" }] }, the layout grammar of the MCP dashboards. It is not interchangeable with them, because data binding, widgets and engine scope differ. Every problem names its JSON path and reason. There is one filter vocabulary:process,activeElement,state,withIncident,businessKey. A board holds at most 12 widgets.counter: count per engine and in total, with a warning per engine.instanceList: the first 50 matching instances of each engine in one table with an engine column, plus each engine's total.incidentSummary: instances with incident per engine or per process, read fromlistDefinitions.processDiagram: the latest deployed version of one process on one engine, with the running and incident badges of the definition panel (ElementBadges, now shared). A click on a count opens that panel at the element.incidentList: the first 50 open incidents of each engine with element and message, optionally of one process. It says when more are open, since the contract has no incident count.describeEnginebefore any other read, so a stale password costs one login per engine. Identical reads are made once per engine. A failed read shows "not read", never 0. A total says how many engines it counts ("from 2 of 3 engines"). One strip per engine that failed or is not configured, with Set credentials… or Edit connection….BoardPanel: it publishes only ready states, soPanelStateandViewSessionstay single-engine.copyintent.openBoardInstance,openBoardProcess,openBoardEngine,setBoardCredentialsandopenBoardFile. Each is opened only when the shown board lists the target on that engine, and only with a filter the definition panel can show.pulse.openBoardcommand.apps/vscode/schemas/board.schema.jsongives completion and checks in the editor throughjsonValidation. It ships in the .vsix (.vscodeignoreand the CI listing).test/architecture/board-schema.test.tsholds it equal to the parser's vocabulary.apps/vscode/sandbox/.pulse/boards/shop-operations.board.jsonandorder-fulfillment.board.json, six new screenshot use cases, docs pagedocs/vscode/boards.md, ADRboards.md, and updates toarchitecture.mdanduser-interface.md.Verification
pnpm build,pnpm typecheck,pnpm testandpnpm lint(ratchets, dependency rules, knip, docs references) pass at the root.pnpm test:mutationover the changed core files scores 89.21 against the threshold of 79.pnpm --filter pulse-cockpit run packageshipsextension/schemas/board.schema.json.sandbox:up), with shop-dev, shop-test behind a login and the unreachable prod-eu:Out of scope / Follow-ups
The issue asked for three things this branch leaves out:
healthwidget. A status strip per engine replaces it, so there is no green "healthy".var:columns. They need a variable projection in the contract, so the parser refuses them with a reason.Planned as follow-ups:
pulse.liveUpdates.var:columns..pulse-cli.json, shared with the CLI in a-domainpackage.Seen while testing but not changed here: open panels, boards included, do not follow a theme switch until they are reopened.
Screenshots
A board across shop-dev, shop-test and an unreachable prod-eu:
The board file with the schema:
A board around one process: the deployed diagram on two engines, their open incidents and the running orders:
A count in a board diagram opens the process filtered to that element:
A broken board names each problem with its path and reason:
Closes #455