@timurproko/a1 0.2.2 → 0.2.3-dev.651
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composition/owned-ui.js +3 -3
- package/dist/native/darwin-arm64/manifest.json +1 -1
- package/dist/native/linux-x64/manifest.json +1 -1
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/docs/architecture/toolchain.md +1 -1
- package/docs/ci-release-runbook.md +10 -5
- package/package.json +1 -1
|
@@ -15,6 +15,7 @@ import { OwnedSettingsManager } from "../ui/settings/manager.js";
|
|
|
15
15
|
import { createPiTerminalBridge } from "../integrations/pi/tui-runtime/presentation-adapter.js";
|
|
16
16
|
import { createOwnedRouteHost } from "./settings-route-host.js";
|
|
17
17
|
import { renderPiShellChangelogLines } from "../integrations/pi/components/shell-presenters-info.js";
|
|
18
|
+
import { nativeHyperlinkStyle } from "../ui/components/spans.js";
|
|
18
19
|
export async function composeOwnedUiApplication(options = {}) {
|
|
19
20
|
return (await composeOwnedUi(options)).application;
|
|
20
21
|
}
|
|
@@ -68,14 +69,13 @@ export async function composeOwnedUi(options = {}) {
|
|
|
68
69
|
// dark, regardless of terminal detection or a previously stored Pi theme. The
|
|
69
70
|
// comparison profile keeps Pi's configured theme behavior and settings surface.
|
|
70
71
|
applyConfiguredPiTheme(ownedSurfaces ? "dark" : adapter.configuredTheme());
|
|
71
|
-
// Rationale:
|
|
72
|
-
// cannot open before the shell exists, so the closure is settled by the time it runs.
|
|
72
|
+
// Rationale: Routes open only after shell construction.
|
|
73
73
|
const references = {
|
|
74
74
|
changelog: async (input) => {
|
|
75
75
|
if (input?.document === undefined && releaseNotesFailure !== undefined)
|
|
76
76
|
throw releaseNotesFailure;
|
|
77
77
|
const markdown = input?.document ?? releaseNotes?.completeMarkdown ?? "No A1 release notes found.";
|
|
78
|
-
return { rows: width => renderPiShellChangelogLines(markdown, width) };
|
|
78
|
+
return { rows: width => renderPiShellChangelogLines(markdown, width).map(row => nativeHyperlinkStyle(row)) };
|
|
79
79
|
},
|
|
80
80
|
hotkeys: async () => {
|
|
81
81
|
const presentation = shell.hotkeysPresentation();
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"platform": "darwin",
|
|
6
6
|
"architecture": "arm64",
|
|
7
7
|
"capability": "supported",
|
|
8
|
-
"builtAt": "2026-
|
|
8
|
+
"builtAt": "2026-10-01T10:16:17.498Z",
|
|
9
9
|
"artifact": {
|
|
10
10
|
"filename": "process-guardian",
|
|
11
11
|
"sha256": "9db1726bbe3fc2e8292f2ead1e7e9d0fd4d7d0dc9217b372582bf354b0f565dc",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"platform": "linux",
|
|
6
6
|
"architecture": "x64",
|
|
7
7
|
"capability": "supported",
|
|
8
|
-
"builtAt": "2026-
|
|
8
|
+
"builtAt": "2026-10-01T10:16:18.305Z",
|
|
9
9
|
"artifact": {
|
|
10
10
|
"filename": "process-guardian",
|
|
11
11
|
"sha256": "d8cda6b0c7cb36c0cc41e90802aceebf6c02eaebbc08a83d7d963d2e918dbd7a",
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
"platform": "win32",
|
|
6
6
|
"architecture": "x64",
|
|
7
7
|
"capability": "supported",
|
|
8
|
-
"builtAt": "2026-
|
|
8
|
+
"builtAt": "2026-10-01T10:17:25.965Z",
|
|
9
9
|
"artifact": {
|
|
10
10
|
"filename": "process-guardian.exe",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "a86fc4076f983e946565c8324bf226cbff6d57d097b935ff1c94236aee1df9fd",
|
|
12
12
|
"size": 178176
|
|
13
13
|
},
|
|
14
14
|
"provenance": {
|
|
Binary file
|
|
@@ -81,7 +81,7 @@ Presentation acceptance is the reader comparing `a1 pi` with pinned Pi. `node sc
|
|
|
81
81
|
|
|
82
82
|
## Publication
|
|
83
83
|
|
|
84
|
-
One reusable workflow publishes both npm channels: `.github/workflows/publish.yml`. Pushes do not publish. Nightly development verification runs at `03:17 UTC`; `npm run develop` dispatches the development wrapper for a numbered preview. `npm run release -- patch` generates a source-bound draft GitHub Release with a Pi-style version/date heading and categorized change sections, starts `.github/workflows/release-candidate.yml` to run the complete stable suite on that source, prints the run link, waits for it, and prints the draft editing link once only after it passes. Choosing native **Publish release** on the draft is the only stable npm trigger: GitHub creates the tag at the bound source, and the `release.published` workflow calls the default-branch publisher, which derives the authorized human actor, source, Release identity, normalized body, and digest, and requires the successful candidate run for that source and version. A preview is stamped as `-dev.<merged pull-request number>` and uses npm `next` only as an internal dist-tag. New candidates pack the application and dependency-free installer once each—including committed release history plus the approved current note snapshot—and validate their exact bytes on Windows, Linux, and macOS; after the click the published note is repacked and the exact-package gates run on the final bytes. A repeated nightly verifies both immutable registry tarballs. After npm verification, publication uploads the asset and fast-forwards `master`, then App-authenticated automation proposes one exact,
|
|
84
|
+
One reusable workflow publishes both npm channels: `.github/workflows/publish.yml`. Pushes do not publish. Nightly development verification runs at `03:17 UTC`; `npm run develop` dispatches the development wrapper for a numbered preview. `npm run release -- patch` generates a source-bound draft GitHub Release with a Pi-style version/date heading and categorized change sections, starts `.github/workflows/release-candidate.yml` to run the complete stable suite on that source, prints the run link, waits for it, and prints the draft editing link once only after it passes. Choosing native **Publish release** on the draft is the only stable npm trigger: GitHub creates the tag at the bound source, and the `release.published` workflow calls the default-branch publisher, which derives the authorized human actor, source, Release identity, normalized body, and digest, and requires the successful candidate run for that source and version. A preview is stamped as `-dev.<merged pull-request number>` and uses npm `next` only as an internal dist-tag. New candidates pack the application and dependency-free installer once each—including committed release history plus the approved current note snapshot—and validate their exact bytes on Windows, Linux, and macOS; after the click the published note is repacked and the exact-package gates run on the final bytes. A repeated nightly verifies both immutable registry tarballs. After npm verification, publication uploads the asset and fast-forwards `master`, then App-authenticated automation proposes one exact reopening PR, which documentation auto-merge re-verifies and merges after required CI, storing both next `-dev` versions and the note. A failure before either package reaches npm returns the Release to draft and deletes its unconsumed tag, the only tag deletion the release-automation App may perform; after npm, the same run's failed jobs are rerun. Tags are never moved or reused. All npm publication uses provenance from the `npm-publish` environment, a preview never changes `latest`, and one global non-cancelling concurrency group serializes the final registry check.
|
|
85
85
|
|
|
86
86
|
`docs/ci-release-runbook.md` is the operational reference.
|
|
87
87
|
|
|
@@ -82,7 +82,7 @@ effect of stable publication, not a trigger.
|
|
|
82
82
|
| `npm run develop` | Preview package gates on Windows, Linux, and macOS; an existing numbered preview is an early successful no-op |
|
|
83
83
|
| Nightly at `03:17 UTC` | One full documentation review plus the complete non-physical suite on Windows, Linux, and macOS, every night |
|
|
84
84
|
| `npm run release -- ...` | Creates an editable source-bound draft (or refreshes the existing draft of that version bound to an older `develop`, regenerating its notes and removing duplicate drafts of that version), starts the complete stable suite on that source in `.github/workflows/release-candidate.yml`, prints its run link, waits, and prints the draft edit link only after validation passes |
|
|
85
|
-
| Native **Publish release** on the prepared draft | GitHub creates the source-bound tag; `.github/workflows/finalize-release.yml` requires the successful candidate run, adopts the package pair it validated (replacing only the packaged release-note resource when the note was edited), proves npm trust, publishes both packages to npm `latest`, and proposes one
|
|
85
|
+
| Native **Publish release** on the prepared draft | GitHub creates the source-bound tag; `.github/workflows/finalize-release.yml` requires the successful candidate run, adopts the package pair it validated (replacing only the packaged release-note resource when the note was edited), proves npm trust, publishes both packages to npm `latest`, and proposes one reopening-and-note PR that auto-merges after required CI; a failure before npm returns the Release to draft |
|
|
86
86
|
| `.github/workflows/release-tag-cleanup.yml` | When a stable Release is deleted, or on dispatch with a version (`gh workflow run release-tag-cleanup.yml -f version=X.Y.Z`): the release-automation App deletes the leftover `vX.Y.Z` tag only while no Release uses it and npm serves neither package; a published version's tag is permanent |
|
|
87
87
|
| `.github/workflows/full-regression.yml` | Additional on-demand complete regression without publication authority |
|
|
88
88
|
| `.github/workflows/pi-upstream-sync.yml` | Nightly at `03:23 UTC`: when npm publishes a newer Pi than the pin that no closed proposal skipped, proposes the upgrade as a draft pull request with the vendored copies that follow upstream merged, the kept copies reported with their upstream delta, the ledger, headers, inventories, public API and feature baselines, startup graph, and parity evidence regenerated, and every gate verdict (passed, failed, or blocked by conflict markers) and review item in the body; never merges and never replaces a proposal a human has continued |
|
|
@@ -166,7 +166,11 @@ succeeds. If validation finishes before auto-merge can be armed and GitHub alrea
|
|
|
166
166
|
reports the pull request clean, the reconciler squash-merges only the validated head
|
|
167
167
|
SHA. Every current and renamed-from path must be under `openspec/**`, under
|
|
168
168
|
`docs/**` other than `docs/releases/**`, or exactly the root `README.md`. Release
|
|
169
|
-
history
|
|
169
|
+
history requires manual integration except in the verified release reopening PR:
|
|
170
|
+
a `chore/release-X.Y.Z-dev` PR opened by `openspec-ci[bot]` that modifies only the
|
|
171
|
+
three version declarations (base `<released>-dev`, head its patch successor `-dev`,
|
|
172
|
+
nothing else in the manifests) and adds exactly `docs/releases/<released>.md` equal
|
|
173
|
+
to the published stable Release body. It takes the same validated squash route. Eligible pull requests must use a
|
|
170
174
|
non-draft branch in this repository and target `develop`. Implementation-associated PRs and newly introduced active OpenSpec changes are held for manual integration even when their diff is documentation-only. Body edits trigger reconciliation; removing a marker cannot bypass the base/head tree check. Standalone existing-change revisions and archive moves remain eligible.
|
|
171
175
|
|
|
172
176
|
The exact allowlist covers maintained OpenSpec, architecture, feature, manual,
|
|
@@ -288,8 +292,9 @@ the version. The retired `--approve` form remains a mutation-free usage error.
|
|
|
288
292
|
uploads the asset, fast-forwards `master`, and creates or exactly reuses
|
|
289
293
|
`chore/release-0.1.9-dev`. That PR's single commit changes only the application
|
|
290
294
|
manifest, root lockfile, installer version, and exact `docs/releases/0.1.8.md`.
|
|
291
|
-
|
|
292
|
-
|
|
295
|
+
Documentation auto-merge re-verifies that exact content and squash-merges it
|
|
296
|
+
once required CI passes on its current head. If any check fails it disables
|
|
297
|
+
auto-merge; then let required CI pass and **merge it manually**.
|
|
293
298
|
|
|
294
299
|
Publishing before validation finishes is safe: publication fails before npm and the
|
|
295
300
|
Release returns to draft. Publish the draft again once validation has succeeded.
|
|
@@ -366,7 +371,7 @@ Rules that do not bend:
|
|
|
366
371
|
- **Draft preparation stops:** inspect the reported draft Release. Preparation may safely reuse an exact source-bound draft without overwriting edits, and reuses a running or successful validation of the same source and version. If `develop` advanced, retire the stale draft explicitly and prepare a new one from synchronized `develop`.
|
|
367
372
|
- **Candidate validation fails:** do not publish the draft. Fix the failure on `develop`, retire the draft, and prepare again; the new draft binds the new source. Publishing anyway fails before npm and returns the Release to draft.
|
|
368
373
|
- **Publication fails before npm:** the rollback job returns the Release to draft and deletes the unconsumed tag, so no manual tag cleanup is needed. Read the failed `Publish stable release` run, fix the cause (for example, wait for validation, undo a body edit made after publishing, rerun candidate validation when its retained package is missing or older than 30 days, or register the trusted publisher the npm preflight names), and choose **Publish release** again. If the rollback job itself failed, rerun it; never delete or move a tag by hand.
|
|
369
|
-
- **Publication fails after npm:** the Release and tag stay. Rerun the failed jobs of that same run: its retained candidate and digests make the final registry check an exact-byte no-op for any package already published. Any recovered reopening PR must contain only both next `-dev` version declarations and the exact approved `docs/releases/<released>.md`; merge it by hand
|
|
374
|
+
- **Publication fails after npm:** the Release and tag stay. Rerun the failed jobs of that same run: its retained candidate and digests make the final registry check an exact-byte no-op for any package already published. Any recovered reopening PR must contain only both next `-dev` version declarations and the exact approved `docs/releases/<released>.md`; it auto-merges after CI when it verifies, otherwise merge it by hand. Never republish immutable bytes. Never repeat stable publication for a published version.
|
|
370
375
|
|
|
371
376
|
## Safe release-command validation
|
|
372
377
|
|
package/package.json
CHANGED