Skip to content

Prism 0.7.5

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Oct 01:15

Release date: 2026-10-14

Prism 0.7.5 keeps every connected read within its size limit, decides which API contracts apply to a feature by one rule on the board, in the lifecycle checks and in lint, and lets an applicable contract that cannot be cited block delivery and release instead of reading as no contract. The side panel shows long app stages and design tracks in full, a board serves current data from its first request, and the npm launcher no longer fails a first install on Windows over a leftover temporary folder.

Fixed

  • An API contract without a citation blocks delivery instead of reading as no contract. A contract page whose version is not an integer from 1, or whose feature-id is longer than F- and 18 digits, has no citation. The three Delivery binding checks left such a contract out of the set of current citations, so a feature whose only applicable contract was unusable, its own or a shared one its app requirements link, accepted a Delivery row that cites none: dev-done recorded Contract: none and the contract's lint error did not gate the feature. A contract that applies to the feature and has no citation now blocks every Delivery row the check covers, none included. The board refuses the dev-done proposal with contract_binding_stale and details.unusable lists the contract paths beside current; the contract-binding-stale check of the transition is blocked; lint reports stale-delivery-evidence at the feature page for the rows of apps that are not yet released. Each message names the contract path and says to correct the contract page. A contract page that is missing or does not apply to the feature changes nothing, and a released app's row is still checked against its release record. The board finds the contracts that apply to a feature the way the transitions and lint do: it reads the app requirement pages of the apps in the feature's scope from disk (a requirement page in the proposal replaces its disk version), follows the same links, and counts only the files the wiki readers treat as pages. So release-done is refused with contract_binding_stale when a contract that only an app requirement on disk links has no citation (a release proposal carries the feature page and the release record, so it used to miss that contract, accept Delivery rows that cite none and pass lint afterwards), and a file whose name starts with _ is a template that never applies: an _example.md that names the feature in feature-id no longer blocks a delivery or a release that cites the feature's valid contract. A requirement page belongs to the feature by its parsed feature-id and its app, never by the text it contains, so a feature-id written as a YAML escape ("F-\u0030\u0030\u0031") counts as F-001 on the board, as it does in the transitions and lint, and its contract blocks a delivery or a release instead of being skipped. The wiki reads one folder level: an API contract page is a file directly in knowledge/wiki/api-contracts/ and an app requirement page one directly in knowledge/wiki/app-requirements/. A Markdown file in a sub-folder of either is no page for the board, the transitions or lint: it is not found by feature-id or file name, it is not a link source, a link to it names no contract, and an implemented contract there is not in the set a QA return lowers. Lint reports it as page-in-sub-folder, an error at that file that says to move the page directly into the folder and does not gate an action.
  • read_workspace of a feature page with hundreds of criteria stays within one tool result. The criteria annotations of a feature page (each criterion's id, revision, applies_to and integration) rode on the first piece without counting toward its size, so a page with 500 criteria returned about 71,000 characters against the 48,000-character limit. A page whose record with all its annotations does not fit is now cut so that every piece, annotations included, fits, and each piece lists the criteria whose list item starts in its content range (an empty list when none does); joining the annotations.criteria of the pieces in order gives the list a whole read returns. A criterion whose applies_to list alone is too long to fit beside one character of content keeps its exact id and revision and shows applies_to_count and applies_to_omitted: true instead of the list. A file that fits whole, the cursors, the digests and the recorded reads are unchanged, and mcp_contract stays 4. An API contract whose feature-id is longer than F- and 18 digits has no citation, because the citation repeats the ID: read_workspace returns no annotations.contract for it, lint reports invalid-api-contract-feature-id at the contract page, and no Delivery row can cite it.
  • The side panel shows app stages and design tracks in full. A feature's panel showed each app ID, app stage, design track and design state on one line, cut with an ellipsis, so a long name could be read only by hovering. The panel now shows them whole and wraps them, at the separator first, so they can be read with the keyboard alone. Cards keep their compact lines.
  • A board shows current data from its first request. A board server built its graph snapshot before it held the workspace, so a page opened right after a restart could show data from before another writer's last change until the next poll. It now refreshes the snapshot once it holds the workspace and before it answers any request.
  • The npm launcher no longer fails a first install on Windows over a leftover temporary folder. Windows can hold a file for a moment after the process that used it has exited. The launcher now retries removing its staging folder, and a staging folder that still cannot be removed after uv is installed is left in the cache instead of failing the launch.