Repository navigation
Prism 0.7.2
Release date: 2026-10-13
Prism 0.7.2 makes the board page explain a feature's progress: each app's stage, the design tracks and each app's release and incident state, with every action rule taken from the transition registry, including the returns from implementation and from QA. The standard wiki files are listed once, documented error codes are returned where they apply, the unused-contract warning covers every status, and the board keeps keyboard focus when it updates.
Changed
-
The packaged skills and
AGENTS.mdrequireprism-kit>=0.7.2, because thefeature-reopenskill runs the QA returns' transition preflight, which 0.7.2 accepts. -
The board page explains a feature's status. A card lists each active app with its stage (
backend · released,worker · in-qa) fromin-devon, and the panel lists every app in scope with a retired app marked as retired. A released feature keeps its history on every surface, as the status board does: its graph node,prism statusand lint include an app retired later that took part in the release (its evidence rows, a valid release record that ships the feature for it, or rows archived in the feature's Evidence history name it), with its stage, and the page shows it asreleased · retired; an app retired before it took part, with no evidence row and no release record, is left out. Deleting or archiving the current rows of such an app does not remove it from the scope: lint reports the missing rows (feature-status-not-minimum,app-row-missing) and the surfaces show the app at the stage its remaining evidence derives. A feature that waits for design or is in design shows itsuiandtechnicaltrack states on the card and in the panel. The Apps view shows every app that has an Operations row, with its released features, latest release record and outcome, open bugs and open incidents, derived by the code that writes and lints the status board's Operations table; an app with only a standalone bug or incident (feature: none) is shown too, and the graph keeps its app node. The graph envelope carriesdesign_trackson a feature node,facts.app_operationsandfacts.action_registry; the graph schema describes them. -
The board page takes its action rules from the transition registry. The server generates the metadata of every feature action from
ACTION_SPECS(sources, targets, owners, skill, arguments, human-direct or agent proposal, drop column) and sends it with the graph; the page's hand-written tables (ACTION_CONTRACTS,ACTION_DROP_STAGE, the connected action sets and skills, the command and argument tables) are gone. The drop column is set only where it is certain, for an action with a concrete target status; an action that targets the minimum over the app stages or leaves the status unchanged has none. The page offers the return requests of the registry: a feature in development opensdev-return-specanddev-return-design, and a feature in QA opensqa-return-specandqa-return-design.release-rollback,release-redeployandscope-editare not offered on the page: the first two need a release record ID and the scope edit needs the new scope, which a copy-only request cannot carry. The static export and the legacy dashboard stay copy-only. -
The standard wiki files (
SCHEMA.md,LIFECYCLE.md,ACTIONS.md,SETTINGS.md,CONNECTED.md,index.md,status-board.mdandlog.md) are listed once, inprism_cli/standard_files.py, with the categories each belongs to: required, recorded as a revision of a preview, and gating for lifecycle actions. A preview's candidate workspace copies the whole wiki tree, so it has no category of its own. Lint, the board service, the lifecycle checks, the index and the workspace checks read that manifest, and themanaged_filemessage names the managed files from it, so a new standard file is one entry in it. Behavior is unchanged.
Fixed
- A scope edit that removes the last app answers
scope_empty. The genericinvalid_feature_outputrule for an emptyappslist answered first, at every stage, so the documented code was never returned. The edit is refused as before, now with the code that names it. unsupported_source_pairis returned where it can arise.release-doneon a feature that is not in development, in QA orready-for-releaseanswers it, and a feature skill proposed from another status answerslifecycle_action_required. The two feature-level source checks that the action selection always answers first (the transition source and the reopen route) stay as guards for an internal path that bypasses the selection, anddocs/troubleshooting.mdnames the code each case returns.unused-api-contractin every status. Lint warns about a feature's owndraftAPI contract whenever its one## API surfacesection declares no API work, not only fromready-for-devtoready-for-release. It stays a warning that does not gate.- The board keeps keyboard focus when it re-renders. A live update, a refresh after an apply or a reconnect no longer drops focus to the page body: it returns to the same control, or else to its card, the card's column or the region. The open detail panel is one of those regions, so a control in it keeps focus across a live update. Focus inside an open dialog is untouched.
- Recovering a partial
dev-done,qa-passorrelease-done, or anyqa-verify, no longer ends in a stale view. The page expected the stage after the highest source for these minimum-of-stages actions, which is wrong when only some apps move; it now accepts any status among the action's targets and waits for a stage only where the registry names one. - The
qa-return-specandqa-return-designrequests are offered on the board page, as the returns from implementation are, and the transition preflight lists them. The preflight reports a QA return as ready only when the board service would accept the route: no app of the feature is released (partial_release_requires_new_feature) and, while the feature is in development, an app has reached QA (app_stage_mismatch). The service and the preflight share one rule; the checks of the proposal itself, such as the archive and the history entry, stay with the preview. - Lint checks a released feature over the scope the other surfaces show. The status minimum and the app stages of a
releasedfeature are derived over its active apps and its retired apps that took part in the release (evidence rows, a valid release record or archived history rows name them), as on the status board, the graph andprism status, so a release row missing for an app retired after the release is reported (feature-status-not-minimum), also when every current row of that app was deleted or archived. A feature that is not released keeps its active apps.