@timurproko/a1 0.1.8-dev.544 → 0.1.8-dev.558

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.
Files changed (82) hide show
  1. package/bin/cli.js +4 -0
  2. package/dist/app/session-shell/session-shell-root.js +15 -5
  3. package/dist/cli/dispatch.d.ts +5 -0
  4. package/dist/cli/dispatch.js +26 -0
  5. package/dist/cli/session-context.d.ts +9 -0
  6. package/dist/cli/session-context.js +29 -0
  7. package/dist/composition/owned-ui.js +6 -2
  8. package/dist/contracts/owned-ui/model.d.ts +5 -0
  9. package/dist/contracts/owned-ui/validation.js +6 -0
  10. package/dist/contracts/presentation/index.d.ts +13 -0
  11. package/dist/contracts/presentation/index.js +30 -0
  12. package/dist/features/launch/index.d.ts +2 -0
  13. package/dist/features/launch/index.js +1 -0
  14. package/dist/features/launch/session-context.d.ts +8 -0
  15. package/dist/features/launch/session-context.js +8 -0
  16. package/dist/features/owned-ui/project-trust-prompt.js +1 -1
  17. package/dist/features/owned-ui/reference-screen-app.js +7 -8
  18. package/dist/features/owned-ui/settings-app.js +9 -5
  19. package/dist/foundation/lifecycle/index.d.ts +2 -0
  20. package/dist/foundation/lifecycle/index.js +1 -0
  21. package/dist/foundation/lifecycle/session-repository-context.d.ts +18 -0
  22. package/dist/foundation/lifecycle/session-repository-context.js +173 -0
  23. package/dist/foundation/release/index.d.ts +2 -2
  24. package/dist/foundation/release/index.js +1 -1
  25. package/dist/foundation/release/update.d.ts +22 -1
  26. package/dist/foundation/release/update.js +61 -12
  27. package/dist/integrations/pi/components/models-dialog.js +9 -9
  28. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +0 -6
  29. package/dist/integrations/pi/components/shell-editor-autocomplete.js +41 -8
  30. package/dist/integrations/pi/components/shell-extension-ui.js +4 -2
  31. package/dist/integrations/pi/components/shell-footer-status.js +1 -1
  32. package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -2
  33. package/dist/integrations/pi/components/skills-command.d.ts +2 -0
  34. package/dist/integrations/pi/components/skills-command.js +11 -10
  35. package/dist/integrations/pi/components/skills-dialog.js +8 -3
  36. package/dist/integrations/pi/components/theme.d.ts +4 -0
  37. package/dist/integrations/pi/components/theme.js +10 -0
  38. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +4 -4
  39. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +2 -2
  40. package/dist/integrations/pi/components/upstream/components/extension-editor.js +9 -10
  41. package/dist/integrations/pi/components/upstream/components/extension-input.d.ts +17 -0
  42. package/dist/integrations/pi/components/upstream/components/extension-input.js +72 -0
  43. package/dist/integrations/pi/components/upstream/components/extension-selector.d.ts +15 -0
  44. package/dist/integrations/pi/components/upstream/components/extension-selector.js +92 -0
  45. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +3 -2
  46. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +16 -15
  47. package/dist/integrations/pi/components/upstream/components/session-footer.js +25 -9
  48. package/dist/integrations/pi/components/upstream/components/session-selector.js +25 -16
  49. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +6 -4
  50. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +22 -12
  51. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +3 -2
  52. package/dist/integrations/pi/components/upstream/components/tree-selector.js +16 -13
  53. package/dist/integrations/pi/components/upstream/components/trust-selector.js +11 -5
  54. package/dist/integrations/pi/engine/adapter.d.ts +2 -1
  55. package/dist/integrations/pi/engine/adapter.js +2 -0
  56. package/dist/integrations/pi/engine/message-values.js +1 -0
  57. package/dist/integrations/pi/engine/resource-catalog.js +1 -1
  58. package/dist/integrations/pi/engine/session-runtime.d.ts +11 -2
  59. package/dist/integrations/pi/engine/session-runtime.js +136 -33
  60. package/dist/integrations/pi/engine/transcript-projection.js +35 -0
  61. package/dist/integrations/pi/startup-public.manifest.json +2 -0
  62. package/dist/native/darwin-arm64/manifest.json +1 -1
  63. package/dist/native/linux-x64/manifest.json +1 -1
  64. package/dist/native/win32-x64/manifest.json +2 -2
  65. package/dist/native/win32-x64/process-guardian.exe +0 -0
  66. package/dist/product-identity.d.ts +1 -1
  67. package/dist/product-identity.js +1 -1
  68. package/dist/product-identity.json +2 -1
  69. package/dist/ui/components/dialog-panel.d.ts +2 -1
  70. package/dist/ui/components/dialog-panel.js +6 -1
  71. package/dist/ui/components/index.d.ts +2 -0
  72. package/dist/ui/components/index.js +1 -0
  73. package/dist/ui/components/shortcut-hints.d.ts +7 -0
  74. package/dist/ui/components/shortcut-hints.js +12 -0
  75. package/dist/ui/components/shortcuts.d.ts +2 -0
  76. package/dist/ui/components/shortcuts.js +5 -2
  77. package/dist/ui/components/transcript-viewport.d.ts +1 -1
  78. package/docs/architecture/project-structure.md +6 -3
  79. package/docs/ci-release-runbook.md +9 -7
  80. package/docs/openspec-archive-automation.md +6 -0
  81. package/docs/validation.md +5 -2
  82. package/package.json +1 -1
@@ -11,6 +11,7 @@ export { progressStatusText } from "./progress-status.js";
11
11
  export { FrameCache, RENDER_REVISION_KINDS, RenderRevisionTracker, ZERO_REVISIONS, normalizeRevisions, revisionsEqual } from "./revision.js";
12
12
  export { MAX_COPY_ROWS, MAX_COPY_SOURCE_UNITS, selectionCopyLineContent, selectionCopyRowText } from "./selection-copy.js";
13
13
  export { ScrollbarRails, isThumbRow, scrollForThumbRow, scrollForTrackPage, scrollbarGeometry, scrollbarPresentation, scrollbarReservesSpace, scrollbarSelectionRows, scrollbarWheelRows, } from "./scrollbar.js";
14
+ export { renderShortcutHints } from "./shortcut-hints.js";
14
15
  export { GLOBAL_SCOPE, ShortcutRegistry, assembleShortcuts, assertNoShortcutConflicts } from "./shortcuts.js";
15
16
  export { backgroundSgrSpan, heldNativeHyperlinkStyle, hyperlinkSgrSpan, hyperlinkTargetAtColumn, nativeHyperlinkStyle, overlaySpan } from "./spans.js";
16
17
  export { readVisibleHyperlinks } from "./visible-hyperlinks.js";
@@ -0,0 +1,7 @@
1
+ import { type SemanticShortcutHint } from "../../contracts/presentation/index.js";
2
+ import type { UiTheme } from "./theme.js";
3
+ export type ShortcutHintEntry = SemanticShortcutHint;
4
+ /** Returns an unstyled modal instruction row for width-aware clipping. */
5
+ export declare function shortcutHintsText(entries: readonly ShortcutHintEntry[], indent?: number): string;
6
+ /** Paints one modal instruction row without decorative separator glyphs. */
7
+ export declare function renderShortcutHints(entries: readonly ShortcutHintEntry[], theme: Pick<UiTheme, "fg">, indent?: number): string;
@@ -0,0 +1,12 @@
1
+ import { renderSemanticShortcutHints, } from "../../contracts/presentation/index.js";
2
+ /** Returns an unstyled modal instruction row for width-aware clipping. */
3
+ export function shortcutHintsText(entries, indent = 0) {
4
+ return renderSemanticShortcutHints(entries, { key: text => text, action: text => text }, indent);
5
+ }
6
+ /** Paints one modal instruction row without decorative separator glyphs. */
7
+ export function renderShortcutHints(entries, theme, indent = 0) {
8
+ return renderSemanticShortcutHints(entries, {
9
+ key: text => theme.fg("dim", text),
10
+ action: text => theme.fg("muted", text),
11
+ }, indent);
12
+ }
@@ -4,6 +4,7 @@
4
4
  * assembled, and any listing is generated from the same declarations — so a
5
5
  * listed shortcut is one dispatch would actually invoke.
6
6
  */
7
+ import type { ShortcutHintEntry } from "./shortcut-hints.js";
7
8
  export interface ShortcutDeclaration {
8
9
  /** Key token, for example `up`, `shift+down`, `ctrl+c`, or a literal character. */
9
10
  readonly key: string;
@@ -52,6 +53,7 @@ export declare class ShortcutRegistry<Action extends string = string> {
52
53
  * the same declarations dispatch reads, so a key cannot be described here and
53
54
  * bound to something else, or bound and never mentioned.
54
55
  */
56
+ hintEntries(scope: string): readonly ShortcutHintEntry[];
55
57
  hint(scope: string, separator?: string): string;
56
58
  /** The listing, derived from the declarations dispatch reads. */
57
59
  list(scope?: string): readonly ShortcutDeclaration[];
@@ -60,7 +60,7 @@ export class ShortcutRegistry {
60
60
  * the same declarations dispatch reads, so a key cannot be described here and
61
61
  * bound to something else, or bound and never mentioned.
62
62
  */
63
- hint(scope, separator = " · ") {
63
+ hintEntries(scope) {
64
64
  const shown = new Map();
65
65
  for (const declaration of this.#declarations) {
66
66
  if (declaration.hint === undefined)
@@ -70,7 +70,10 @@ export class ShortcutRegistry {
70
70
  if (!shown.has(declaration.hint.keys))
71
71
  shown.set(declaration.hint.keys, declaration.hint.does);
72
72
  }
73
- return [...shown].map(([keys, does]) => `${keys} ${does}`).join(separator);
73
+ return Object.freeze([...shown].map(([key, action]) => ({ key, action })));
74
+ }
75
+ hint(scope, separator = " · ") {
76
+ return this.hintEntries(scope).map(({ key, action }) => `${key} ${action}`).join(separator);
74
77
  }
75
78
  /** The listing, derived from the declarations dispatch reads. */
76
79
  list(scope) {
@@ -101,7 +101,7 @@ export interface TranscriptViewportFrameDescriptor {
101
101
  readonly transientRowCount: number;
102
102
  /** Flexible rows inserted before the bottom-aligned live status while content fits. */
103
103
  readonly transientAlignmentGapRows: number;
104
- /** Live status rows at the end of the transient suffix. */
104
+ /** Bottom-aligned transient rows. */
105
105
  readonly bottomAlignedTailRowCount: number;
106
106
  /** Visible rows owned by the currently streaming transcript block. */
107
107
  readonly liveTailRows: number;
@@ -92,15 +92,18 @@ Build output mirrors the production namespaces directly under ignored `dist/`, w
92
92
 
93
93
  Every task worktree must be created at `{working-dir}/.worktrees/<task-id>`, where `{working-dir}` is the agent session's initial working directory. The `.worktrees` directory is inside that working directory, not beside it. For working directory `D:/Git/a1`, `D:/Git/a1/.worktrees/<task-id>` is correct and `D:/Git/a1-<task-id>` is forbidden.
94
94
 
95
- From the initial working directory, create and address a task worktree explicitly:
95
+ From the initial working directory, create the task branch and worktree, run `a1 session link-worktree <absolute-worktree>` from the owning A1 session, and continue to address it explicitly:
96
96
 
97
97
  ```sh
98
98
  git fetch origin develop
99
- git worktree add --detach .worktrees/<task-id> origin/develop
99
+ git worktree add -b <type>/<short-description> .worktrees/<task-id> origin/develop
100
+ a1 session link-worktree <absolute-worktree>
100
101
  git -C .worktrees/<task-id> status
101
102
  ```
102
103
 
103
- The primary worktree stays on `develop` for integration and must not be used for task edits. Do not edit, move, or remove another session's worktree.
104
+ A successful link response confirming the exact canonical worktree is required before planning, implementation, test, or delivery-documentation edits. If linking fails or confirms another path, stop task edits and report the blocker instead of continuing with primary-checkout footer metadata. A session resuming an existing delivery or switching streams links the exact owned worktree before editing it.
105
+
106
+ The association switches bare A1's footer repository context and pull-request discovery; it does not change process or tool cwd and does not register, claim, release, or authorize cleanup of the worktree. Repository commands therefore keep an explicit worktree path. The primary worktree stays on `develop` for integration and must not be used for task edits. Do not edit, adopt, move, or remove another session's worktree.
104
107
 
105
108
  ## Documentation and comments
106
109
 
@@ -46,7 +46,7 @@ effect of stable publication, not a trigger.
46
46
 
47
47
  | Trigger | Validation and outcome |
48
48
  | --- | --- |
49
- | Pull request into `develop` | Bounded PR-cadence validation; changed/new source documentation is checked once, rendering runs as `none`, `smoke`, or `full`, and exhaustive owners are reported as deferred |
49
+ | Pull request into `develop` | Bounded PR-cadence validation; changed/new source documentation is checked once, rendering runs as `none`, `smoke`, or `full`, exhaustive owners are reported as deferred, and only a trusted-CI-created failed-Full-regression repair adds PR-attached complete regression |
50
50
  | `npm run develop` | Preview package gates on Windows, Linux, and macOS; an existing numbered preview is an early successful no-op |
51
51
  | Nightly at `03:17 UTC` | One full documentation review plus the complete non-physical suite on Windows, Linux, and macOS, every night |
52
52
  | `npm run release -- ...` | Stamps the requested stable version on the open `develop` source, runs the complete exact-byte stable gates, then npm `latest`, tag, GitHub Release, and `master`; one reopening PR follows |
@@ -60,9 +60,9 @@ effect of stable publication, not a trigger.
60
60
 
61
61
  Ordinary type, architecture, unit/contract, and dist checks always run for code changes. Changed-file documentation and rendering run as independent parallel jobs. Rendered shell/component changes select `smoke`; viewport, scheduler, terminal adapter, evidence harness, package identity, and selector changes select `full`; unrelated changes select `none`. The aggregate accepts a skipped modular job only when the current selector requested the skip.
62
62
 
63
- Integration owners declare one cadence in `config/integration-owners.json`. Impact mode selects affected `pull-request` owners: a changed production path selects its coarse owner, a changed test selects its owner, and a changed file under `test/support/` or `test/fixtures/` selects the owners of the retained tests that import it directly or through other support files (the selection lists those tests as its `shared-support` reason). A support file that no retained test imports, or a test tree the scanner cannot read, falls back to every owner the shared rule declares and records `shared-support-declared`; an invalidator, unknown operational path, or manual Development dispatch selects every `pull-request` owner. An implementation-bound PR body does not force conservative selection; it only removes the documentation-only and version-only shortcuts. The modular matrix itself is derived from the selection by `scripts/release/validation-matrix.mjs`, so inactive jobs are not scheduled at all rather than checking out and exiting early. `exhaustive` owners are never silently skipped or reported as passed: impact and aggregate evidence list them as cadence-deferred, and malformed cadence blocks selection. Full regression and nightly/stable release still execute both cadence classes.
63
+ Integration owners declare one cadence in `config/integration-owners.json`. Impact mode selects affected `pull-request` owners: a changed production path selects its coarse owner, a changed test selects its owner, and a changed file under `test/support/` or `test/fixtures/` selects the owners of the retained tests that import it directly or through other support files (the selection lists those tests as its `shared-support` reason). A support file that no retained test imports, or a test tree the scanner cannot read, falls back to every owner the shared rule declares and records `shared-support-declared`; an invalidator, unknown operational path, or manual Development dispatch selects every `pull-request` owner. An implementation-bound PR body does not force conservative selection; it only removes the documentation-only and version-only shortcuts. The modular matrix itself is derived from the selection by `scripts/release/validation-matrix.mjs`, so inactive jobs are not scheduled at all rather than checking out and exiting early. `exhaustive` owners are never silently skipped or reported as passed: impact and aggregate evidence list them as cadence-deferred, and malformed cadence blocks selection. Full regression and nightly/stable release still execute both cadence classes. PR-attached Full regression is selected only when base policy verifies an `openspec-ci` App-authored candidate, its generated repair identity, and every qualifying failed Full regression source field in `regression-provenance.json` against GitHub's read-only workflow-run record. Release/publishing, shared-support, prerequisite, build, validation-authority, unknown-path, label, Release-only repair, and successful-run persistent-overrun changes retain bounded ordinary validation. Planning-only generated repair drafts remain exempt; eligible implementation drafts receive native lane feedback without integration authority.
64
64
 
65
- The real three-release `update-predecessor` scenario is exhaustive because four fresh npm installations dominated recent PR critical paths, and `update-performance` is exhaustive because its assertion is wall-clock timing on a shared runner; the update path's deterministic contracts stay on pull requests through `pi-release-resume` and `package-contracts`. PR validation retains deterministic predecessor command, lifecycle, fault, fixture, materialization, warmup, package, and update contracts. This permits a real published-history incompatibility or update slowdown to reach `develop` before the next exhaustive run detects it. `.github/workflows/full-regression.yml` runs every night at `02:47 UTC` against the `develop` tip with every owner and enforced budgets, independent of publication, so such a regression shows as a failed Full regression run the next morning; nightly publication's own complete validation still blocks publication. For a high-risk release/update change, dispatch Full regression before merge instead of adding an exhaustive owner back to ordinary Development.
65
+ The real three-release `update-predecessor` scenario is exhaustive because four fresh npm installations dominated recent PR critical paths, and `update-performance` is exhaustive because its assertion is wall-clock timing on a shared runner; the update path's deterministic contracts stay on pull requests through `pi-release-resume` and `package-contracts`. PR validation retains deterministic predecessor command, lifecycle, fault, fixture, materialization, warmup, package, and update contracts. This permits a real published-history incompatibility or update slowdown to reach `develop` before the next exhaustive run detects it. `.github/workflows/full-regression.yml` runs every night at `02:47 UTC` against the `develop` tip with every owner and enforced budgets, independent of publication, so such a regression shows as a failed Full regression run the next morning; nightly publication's own complete validation still blocks publication. For diagnosis on any other candidate, dispatch standalone Full regression; labels and high-risk release/update impact do not add it to PR checks or change owner cadence.
66
66
 
67
67
  Development outcomes report each owner/scope invocation separately while sharing authenticated build/package preparation. The aggregate reports setup, scope, job, aggregate-processing, total runner, and runner-critical-path durations. The acceptance targets are at most eight minutes of runner critical path and five minutes for one PR-required scope; an over-target result remains unmet without retries, timeout increases, workload reduction, or mutable installation caches. Hosted queue time is reported separately when available and is not counted as test execution.
68
68
 
@@ -106,7 +106,9 @@ node scripts/release/report-resource-sensitive-validation.mjs --repeats 3 --outp
106
106
 
107
107
  ## Pull request integration
108
108
 
109
- `Development validation required` remains the merge gate for every pull request. For applicable code changes, it requires the dedicated Defender-enabled exact-package startup lane on Windows Node 22. Development validation (including manual dispatch) does not schedule a Windows Node 24 startup lane. The Node 22 lane retains the complete package-install, image preparation/package, and durable-history checks plus startup evidence artifacts. A missing, cancelled, failed, or unexpectedly skipped required startup result still blocks the aggregate; documentation-only, version-only, and draft exemptions are unchanged.
109
+ `Development validation required` remains the merge gate for every pull request. A trusted base-controlled selector binds current PR metadata, merge base, exact head, target, paths (including renamed-from and deleted repair history), and selection identity. When selected, the same PR run calls `.github/workflows/full-regression-shared.yml` and requires Windows 2025 Node 22/24, Ubuntu 24.04 Node 24, and macOS 15 Node 24 plus their exact-run outcome envelopes. Failed, cancelled, missing, stale, mismatched, or unexpectedly skipped work blocks the stable aggregate. Standalone `.github/workflows/full-regression.yml` retains its name, schedule, dispatch, non-cancelling behavior, and non-publishing authority; its result cannot substitute for selected PR evidence.
110
+
111
+ For applicable code changes, it requires the dedicated Defender-enabled exact-package startup lane on Windows Node 22. Development validation (including manual dispatch) does not schedule a Windows Node 24 startup lane. The Node 22 lane retains the complete package-install, image preparation/package, and durable-history checks plus startup evidence artifacts. A missing, cancelled, failed, or unexpectedly skipped required startup result still blocks the aggregate; documentation-only, version-only, and draft exemptions are unchanged.
110
112
 
111
113
  | Startup runtime | Development validation (PR or manual) | Development preview (`npm run develop`) | Nightly and stable publication | Manual Full regression |
112
114
  | --- | --- | --- | --- | --- |
@@ -115,13 +117,13 @@ node scripts/release/report-resource-sensitive-validation.mjs --repeats 3 --outp
115
117
 
116
118
  Each selected startup lane runs the package-install scenarios once: a failed budget remains failed and is never retried to obtain a warmed result. The budgets are the ones the `a1-shell` capability declares (2 seconds after an update and on a warm launch, 2.5 seconds with no live supervisor); development validation, development previews, nightly publication, and Full regression record an overrun as a warning and are judged by the three-run persistent-overrun verdict, while stable publication fails on it (see `STARTUP_BUDGET_ENFORCEMENT` in [validation](validation.md)). The publication lane set comes from `scripts/release/publication-validation-matrix.mjs`: a numbered preview validates on the Windows, Linux, and macOS Node 24 lanes, and nightly covers the same head on Windows Node 22 within a day. Node 24 runtime support, other PR jobs, Defender, and publication gates are unchanged. Full validation retains every deferred startup, image, and history test through its existing suite owners.
117
119
 
118
- The trade-off is delayed detection: a Node-24-specific regression can reach `develop` before nightly catches it, and the same is true for a real published-predecessor regression. A green bounded PR check does not certify Node 24 or real historical predecessor execution, and nightly failure still blocks its publication. When deferred feedback is needed before nightly, explicitly request the non-publishing Full regression workflow for the desired branch or tag:
120
+ The trade-off is delayed detection: a Node-24-specific regression can reach `develop` before nightly catches it, and the same is true for a real published-predecessor regression. A green bounded PR check does not certify Node 24 or real historical predecessor execution, and nightly failure still blocks its publication. For an unselected candidate or diagnosis, explicitly request the non-publishing standalone Full regression workflow for the desired branch or tag:
119
121
 
120
122
  ```sh
121
123
  gh workflow run full-regression.yml --ref <branch-or-tag>
122
124
  ```
123
125
 
124
- Record the run's resolved source SHA and package evidence; do not substitute an unrelated historical green run for current-head acceptance. This full run is a deliberate additional operation, not an automatic step for every PR.
126
+ Record the run's resolved source SHA and package evidence; do not substitute an unrelated historical green run for current-head acceptance. This standalone run is a deliberate additional operation, not an automatic step for every PR and not selected PR authority.
125
127
 
126
128
  Documentation auto-merge reads the complete GitHub changed-file response and arms
127
129
  squash auto-merge for an eligible pull request while required validation is pending;
@@ -250,7 +252,7 @@ Rules that do not bend:
250
252
 
251
253
  - **PR validation fails:** fix the code and push; do not mark a failed PR-cadence tier optional. If real predecessor history is needed, run Full regression rather than changing the exhaustive result into PR success.
252
254
  - **Nightly startup budget overruns:** a single overrun on Full regression or nightly publication is a warning in the run summary, not a failure; the triage judges the key across the three most recent `develop` runs and opens a `package-startup` candidate only when all three overran. Stable publication still fails on one overrun; rerun it with the measured phases in hand.
253
- - **Nightly regression fails:** the triage workflow opens or refreshes a draft `fix/nightly-regression-<date>` pull request whose body and change carry the evidence; start the fix there. Reproduce from the listed tests or commands on the failed lane, fix without weakening assertions, budgets, timeouts, or coverage, then dispatch `gh workflow run full-regression.yml --ref fix/nightly-regression-<date>` on the completed fix head and record the run in the change's design evidence before hand-off; ordinary PR validation does not run the exhaustive owners the nightly failed on. A day whose failed scope set differs from every open candidate opens a new one. A Full regression dispatched on a candidate's own branch is that candidate's proof; its failures never open another candidate. A failure with no candidate means the triage workflow itself failed; read its run summary and dispatch it with the failed run id and `dry_run` off.
255
+ - **Nightly regression fails:** the triage workflow opens or refreshes a draft `fix/nightly-regression-<date>` pull request whose body and change carry the evidence and whose `regression-provenance.json` binds the source run; start the fix there. A failed Full regression source created by `openspec-ci` selects PR-attached Full regression, while a Release-only failure or successful-run persistent overrun retains ordinary PR validation. Reproduce from the listed tests or commands on the failed lane and fix without weakening assertions, budgets, timeouts, or coverage. Record focused implementation evidence and pre-finalization observations in the change, then require `Development validation required` and, when selected, PR-attached Full regression on the finalized exact head. Put final run/head/selection in Actions and handoff rather than making another evidence-recording commit. Standalone dispatch remains diagnostic; numbered-package nightly recovery is independent. A day whose failed scope set differs from every open candidate opens a new one. A Full regression dispatched on a candidate's own branch is that candidate's proof but never selected PR authority; its failures never open another candidate. A failure with no candidate means the triage workflow itself failed; read its run summary and dispatch it with the failed run id and `dry_run` off.
254
256
  - **Nightly exhaustive predecessor validation fails:** treat the focused PR result as insufficient, keep publication blocked, and repair the incompatibility without reducing predecessor count, timeouts, or exact-package isolation.
255
257
  - **Documentation auto-merge fails:** leave the pull request open, inspect its exact
256
258
  changed-file classification, docs-sensitive inventory, and workflow permissions,
@@ -17,6 +17,12 @@ Version-1 and version-2 deliveries and their existing comments, acceptance PRs,
17
17
  7. **Manual merge accepts:** after the stable protected aggregate succeeds, an authorized human reviews and manually merges the exact validated head. That single action means the listed scenarios are accepted and explicitly authorizes integration. Auto-merge, merge queue, Apps, bots, and documentation reconciliation are forbidden.
18
18
  8. **Verify and clean:** trusted post-merge policy derives `Archived` and reports `accepted-and-archived` from committed bytes and immutable GitHub provenance without editing the accepted PR body. It publishes no lifecycle branch or PR. Shared exact-head remote cleanup may delete the unchanged topic ref; local cleanup remains separately ownership-controlled: the agent parks the worktree with `handoff` at step 7, and the next session's `sweep` removes it once the merge, archive, and remote-ref evidence verify (see [local cleanup](local-worktree-cleanup.md)).
19
19
 
20
+ ### Complete-regression evidence ordering
21
+
22
+ PR-attached Full regression is selected only for a repair that the trusted triage created from a failed Full regression: base policy verifies the immutable `openspec-ci` App author, generated candidate identity, and `regression-provenance.json`. Human-authored lookalikes, publishing or validation-authority changes, labels, Release-only repairs, and successful-run persistent-overrun candidates retain bounded ordinary validation. Planning-only generated repair drafts remain lightweight. Eligible implementation drafts expose all four native lane checks without becoming mergeable. Finish substantive implementation tasks, focused evidence, pre-finalization observations, and known-gap disposition before marking ready. The finalized head then receives new full evidence, required by `Development validation required` alongside the existing gates.
23
+
24
+ The final exact-head run is a handoff gate, not a task requiring a future run ID in committed `design.md`. Keep final head/run/selection identity in Actions outcomes and the maintainer handoff; do not invalidate successful evidence with an extra recording commit. Changed code, acceptance/body metadata, selection labels, or target baseline requires fresh evidence. A selected PR success removes the additional mandatory Full regression dispatch, but a standalone/manual run never substitutes for selected PR checks. Before deployment, existing separate-dispatch obligations remain. Neither PR validation nor manual regression proves numbered-package nightly publication recovery.
25
+
20
26
  The implementation, synchronized canonical specs, conditional acceptance record, and archive therefore reach `develop` atomically. Closing the PR unmerged integrates none of them.
21
27
 
22
28
  ## Draft PR body
@@ -26,7 +26,7 @@ npm run test:release # release gates; publication authority is unc
26
26
 
27
27
  `test:pr-core` is not a replacement for `test:fast`: CI combines it with directly changed and coarse-owner tests from the exact impact selection. Selected resource-sensitive tests run independently on an isolated Windows runner. Selected package, startup, rendering, Pi, compatibility, and platform owners also run independently after their actual prerequisites.
28
28
 
29
- Conservative Development retains every pull-request owner but does not schedule exhaustive owners. Full regression and nightly/stable release retain both cadence classes and declared Windows Node 22/24, Linux Node 24, and macOS Node 24 coverage. The real three-release `update-predecessor` exact-package oracle is exhaustive; deterministic predecessor command, fixture, materialization, warmup, package, and update contracts remain PR-eligible. Preview and release continue to consume exact candidate bytes under their channel-specific contracts. Use manual Full regression before merge when a risky release change needs real published-history evidence. The generated ownership ledger command is:
29
+ Conservative Development retains every pull-request owner but does not schedule exhaustive owners. The complete regression implementation runs inside a PR only when base policy verifies an `openspec-ci` App-created repair, its generated candidate identity, and a failed Full regression source in `regression-provenance.json`. Publishing/prerequisite/validation-authority impact, shared inputs, unknown paths, labels, Release-only repairs, and successful-run persistent-overrun candidates retain bounded ordinary validation. Planning-only generated repair drafts stay exempt; eligible implementation drafts get feedback without integration authority. The selected exact-head evidence must include Windows Node 22/24, Linux Node 24, and macOS Node 24. Full regression and nightly/stable release retain both cadence classes and the same coverage through the shared implementation. The real three-release `update-predecessor` exact-package oracle is exhaustive; deterministic predecessor command, fixture, materialization, warmup, package, and update contracts remain PR-eligible. Preview and release continue to consume exact candidate bytes under their channel-specific contracts. A standalone manual Full regression remains useful for diagnosis or an unselected candidate, but never replaces automatically selected current-PR evidence. The generated ownership ledger command is:
30
30
 
31
31
  ```bash
32
32
  node scripts/release/generate-validation-ownership-ledger.mjs --output .artifacts/validation/ownership-ledger.json
@@ -88,9 +88,12 @@ Download these artifacts from the exact workflow run:
88
88
 
89
89
  - `development-validation-impact`: base/head, global selection identity, PR-core tests, selected pull-request owners, cadence-deferred exhaustive owners, exclusions, and bounded reasons.
90
90
  - `development-validation-outcome-<job>-<platform>-node<node>-attempt-<attempt>`: attempt-qualified outcome, content-free envelope, per-scope authority and duration, and applicable exact-artifact evidence.
91
- - `development-validation-aggregate-<head>-<run>-<attempt>`: selected/deferred owners, accepted/reused attempts, evidence count, runner critical path, total runner time, aggregate processing, setup/gate/scope time, cache state, and invocation count. It reports the eight-minute critical-path and five-minute individual-scope targets as met or unmet; hosted queue delay is not test execution and remains separate.
91
+ - `development-validation-aggregate-<head>-<run>-<attempt>`: selected/deferred owners, accepted/reused attempts, evidence count, runner critical path, total runner time, aggregate processing, setup/gate/scope time, cache state, and invocation count.
92
+ - `pr-full-regression-selection-<run>-<attempt>` plus `complete-regression-aggregate-<run>-<attempt>`: current PR/head/base/metadata selection identity and all four exact-run native lane envelopes. Missing, mismatched, stale, failed, cancelled, or unexpected skip evidence blocks the protected aggregate. It reports the eight-minute critical-path and five-minute individual-scope targets as met or unmet; hosted queue delay is not test execution and remains separate.
92
93
  - startup/resume phase JSONL and performance JSON: first-attempt launch evidence and retained failed setup/readiness records.
93
94
 
95
+ For selected implementation candidates, record focused and pre-finalization full observations before finalization. Keep final head/run/selection identity in Actions and handoff rather than adding a post-success commit that invalidates that evidence. A successful selected PR run replaces an additional mandatory dispatch; standalone runs remain diagnostic, and numbered-package nightly recovery remains independent.
96
+
94
97
  A finalized version-3 PR keeps its phase-free body unchanged. Its ordinary exact-head workflow runs selected product/governance lanes and `Finalized delivery validation` in parallel, then emits the stable protected `Development validation required` aggregate only when both authorities succeed. Green CI enables maintainer review and manual merge but does not claim human acceptance or merge automatically. No lifecycle body edit or second workflow run is required. Any implementation commit changes the head and reruns applicable validation; any body change reruns finalized-record validation and must continue to match the committed manifest. A ready head that still holds the active change fails `Finalized delivery validation` with an `Awaiting automated finalization` notice; the `OpenSpec finalization` workflow pushes the finalized head, which receives its own run. Legacy acceptance-record-only PRs retain their separate trusted `Acceptance record validation` route. Queue availability remains explicitly unavailable inside a runner and is calculated from the Actions API during final run analysis rather than guessed.
95
98
 
96
99
  ## Rollback
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timurproko/a1",
3
- "version": "0.1.8-dev.544",
3
+ "version": "0.1.8-dev.558",
4
4
  "description": "Standalone terminal workspace for supervised native and managed agents",
5
5
  "type": "module",
6
6
  "privateLaunchContract": "neutral-launch-v1",