@penpair/web 0.3.1 → 0.3.4

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.
@@ -1,101 +0,0 @@
1
- # Registry visibility polling — 2026-10-22
2
-
3
- Branch: `codex/release-registry-polling`. Base: reviewed 0.3.0 release on main,
4
- `4ea9975`. Repository package versions remain 0.3.0.
5
-
6
- ## Failure and evidence
7
-
8
- The [publish job](https://github.com/niklas-westman/penpair/actions/runs/39801876697/job/119904592523)
9
- accepted `@penpair/core@0.3.0` at 15:17:02 UTC with signed provenance. npm explicitly
10
- reported that processing could take a few minutes. The script exhausted twelve
11
- five-second visibility checks and stopped at 15:18:05 UTC. No subsequent package
12
- was published by that run.
13
-
14
- An independent registry check then found core 0.3.0 visible, with Docker, the token
15
- adapter, the comparison adapter and web still absent. This establishes a
16
- processing-delay failure after an accepted upload; increasing a publish timeout
17
- or retrying the upload is unnecessary.
18
-
19
- ## Completed checklist
20
-
21
- - [x] Extract a focused post-publish visibility helper. It checks immediately and
22
- then at minute intervals within a ten-minute deadline for each uploaded package.
23
- - [x] Count registry query time toward the deadline and report elapsed time and
24
- the next check/deadline in workflow logs.
25
- - [x] Bound each npm metadata process and HTTP request to 30 seconds or the
26
- remaining deadline, with hidden npm retries disabled.
27
- - [x] Retain errors for failed lookups, explicit interrupted-release continuation,
28
- dependency-order publishing and the configured short-name exception. The
29
- visibility helper never uploads a package.
30
- - [x] Add virtual-clock tests for immediate/delayed visibility, exact minute
31
- cadence, query duration, ten-minute expiry, remaining query budget, late
32
- observations and registry errors. Query-boundary tests cover 404, authentication,
33
- network errors and killed processes without touching npm.
34
- - [x] Document recovery and the order of operations before merging a tooling fix.
35
-
36
- ## Validation
37
-
38
- - `pnpm check`: **658 tests** pass, including 15 new polling/query tests, along
39
- with builds, typechecks, style/path checks and the six-package version guard.
40
- - `pnpm smoke:package`: all six tarballs install and run.
41
- - Final polling/logging tests pass independently using virtual time. No real
42
- ten-minute sleeps or npm publication were used for testing.
43
- - `git diff --check` passes. The empty Changeset records repository tooling work
44
- and does not propose a package version bump.
45
-
46
- ## Current release recovery and remaining risk
47
-
48
- - [ ] On current `main`, dispatch **Publish reviewed Penpair release** with
49
- `version=0.3.0` and `continue_release=true`, then approve `npm-release`.
50
- - [ ] Verify all five required scoped versions and provenance. The `penpair`
51
- wrapper remains explicitly excluded.
52
- - [x] Polling fix merged as PR #5 before recovery completed; the early-merge recovery below supersedes the original merge order.
53
-
54
- The current main workflow still has its original one-minute visibility wait. If
55
- another accepted upload exceeds it, inspect the registry and explicitly continue
56
- the same version again. Rerunning the failed push workflow does not select
57
- continuation automatically.
58
-
59
- Finish recovery before merging this branch: its pending Changeset would block the
60
- manual release gate on main. This preserves the existing guard rather than
61
- changing it to accommodate an interrupted release. Ten minutes is a bounded
62
- window, not a guarantee that npm finishes processing; a failed lookup or an
63
- expired deadline still stops for inspection.
64
-
65
- ## Early merge recovery
66
-
67
- PR #5 was merged on 2026-10-22 as `d339a19` while the 0.3.0 release remained
68
- interrupted. The new minute polling is now on main. The remaining pending note
69
- `bounded-registry-polling` has an empty release list and requests no version bump.
70
- The version-PR workflow therefore created no release PR. Manual continuation is
71
- blocked until that metadata has been consumed.
72
-
73
- The post-merge push workflow separately hit a GitHub API HTTP 500 while reading
74
- associated PRs; its publish job was skipped. That API error is distinct from the
75
- pending-note check. Manual dispatch uses the explicit-version path.
76
-
77
- - [x] Reproduce Changesets' consumption in an isolated workspace: only the empty
78
- note is removed and every package stays at 0.3.0.
79
- - [x] Use the same Changesets CLI operation on the cleanup branch. Confirm no
80
- package manifest, source version, lockfile, script or workflow changes.
81
- - [x] Run the unchanged `checkReleaseCommit` and manual workflow gate against the
82
- resulting tree: both accept 0.3.0 with no pending notes. No publish command runs.
83
- - [x] Pass style/path checks and 47 existing Changesets, release-guard, polling,
84
- registry-query and documentation tests. The cleanup changes only metadata/docs;
85
- the previous 658-test run and six-package smoke cover the retained polling code.
86
- - [ ] Review/merge the metadata-only cleanup PR and pass its CI.
87
- - [ ] On the resulting main, dispatch **Publish reviewed Penpair release** with
88
- `version=0.3.0`, `continue_release=true`, and approve `npm-release`.
89
- - [ ] Verify all five scoped packages and their provenance before marking the
90
- release complete; the short-name exception remains enabled.
91
-
92
- The consumed tooling note is preserved here:
93
-
94
- > Allow npm processing time after successful uploads: check visibility immediately
95
- > and then once per minute within a ten-minute deadline per package. Bound metadata
96
- > queries and retain explicit recovery for interrupted releases. This changes
97
- > repository release tooling only.
98
-
99
- This cleanup completes an empty metadata item through Changesets. Package release
100
- notes and release guards remain intact; the interrupted version remains 0.3.0,
101
- with core skipped by explicit continuation once independently observed on npm.
@@ -1,178 +0,0 @@
1
- # Codex skill workflow readiness
2
-
3
- Created and last updated: 2026-10-23. Branch: `codex/skill-workflow-readiness`.
4
- Status: offline implementation complete. Current step: owner branch review and
5
- the separately pending acceptance trials below.
6
-
7
- ## Living document
8
-
9
- Check an item only in the change that implements and verifies it. Commit each
10
- completed step before proceeding. Add a completion entry stating what changed,
11
- what it resolved, verification and remaining limits. Record newly discovered work
12
- and keep live acceptance unchecked until it actually runs.
13
-
14
- ## Objective and evidence
15
-
16
- Make Penpair's skills easier for Codex to select and follow when working with
17
- Penpot designs, approved references and frontend comparison. Tradient's 0.3.0
18
- trial showed that skills were loaded but their design guidance was underapplied.
19
- Discovery, visible selection, evidence quality and human acceptance are separate.
20
-
21
- The installed skills are valid in `.agents/skills`; relative symlinks work.
22
- Codex selects implicitly from descriptions; optional `agents/openai.yaml` is not
23
- a prerequisite. Official reference: [Codex skills](https://developers.openai.com/codex/skills/).
24
-
25
- ## Discovered project context
26
-
27
- | Area | Existing implementation / validation |
28
- | --- | --- |
29
- | Workspace | pnpm 10.12.1, six packages under `packages/`, all at 0.3.0 |
30
- | Skill sources | `packages/core/skills/` |
31
- | Installation / instructions | `packages/core/src/skills.ts`, `skill-instructions.ts` |
32
- | CLI | `packages/core/src/cli-main.ts`; versioned result envelopes |
33
- | Tests | Vitest; `packages/core/test/skills.test.ts`, `skill-instructions.test.ts` |
34
- | Style / full check | `pnpm format`, `pnpm check` |
35
- | Packaging | `pnpm smoke:package`; installs real tarballs in empty projects |
36
- | CI | `.github/workflows/ci.yml`, full check plus package smoke |
37
-
38
- ## Boundaries
39
-
40
- - Neutral core and shipped skills; project/library knowledge stays in adapters
41
- and consumer-owned facts. Preserve public imports and approval schemas.
42
- - Preserve owner instructions outside the installer-owned block, partial skill
43
- installs, modified skill files and project-owned facts.
44
- - Skill selection grants no extra write permission. Preserve pinned targets,
45
- positive independent readback, immutable approved baselines and owner approval.
46
- - Diagnostics are offline and read-only. They cannot prove what a Codex session
47
- loaded, predict its selection, inspect credentials or certify design quality.
48
- - No version bumps, publication, merge or live Penpot writes in this work. The
49
- owner authorized pushing the completed branch and opening its PR on 2026-10-23.
50
- - Writer-marker recovery, repeated archive flags, bounded state-variant runtime
51
- operations and performance instrumentation remain separate feedback work.
52
-
53
- ## Checklist and acceptance
54
-
55
- - [x] **S1 · Route tasks from generated instructions (P1).** Add concise,
56
- actionable task-to-skill routing inside the owned instruction block. Include
57
- only installed/selected skills, preserve custom text and relative links, and
58
- load the applicable skill before tool work. Verify partial installs, nested
59
- destinations, dry-run, repeated updates and existing preservation tests.
60
- - [x] **S2 · Improve skill selection descriptions (P1).** Use ordinary Penpot,
61
- approved-design, state-variant and frontend requests with clear boundaries.
62
- Validate frontmatter, names, packaged references and neutral content. Do not
63
- claim that metadata validation proves model behavior.
64
- - [x] **S3 · Ship a focused verification skill (P1).** Add `penpair-verify` for
65
- real frontend comparison, screenshot inspection, bounded fixes and reruns.
66
- Route from design/handoff and retain separate readiness/approval stages. Fix
67
- contradictory starter guidance. Verify installation and package enumeration.
68
- - [x] **S4 · Record comparative evidence before expansion (P1).** Add a reusable
69
- project-owned checkpoint format and skill workflow for source evidence,
70
- preserved/changed regions, a representative candidate, consequential findings,
71
- next action and review status. Missing evidence must remain pending. Whole-page
72
- pixel equality is unsuitable for intentionally different states. Verify the
73
- example, reference paths and reuse through the installed skill pack.
74
- - [x] **S5 · Diagnose discovery and exercise realistic requests (P2).** Add
75
- read-only `skills check` diagnostics for discoverable files, metadata, links
76
- and project routing, with explicit limits. Cover missing, malformed, dangling,
77
- divergent and disabled implicit invocation cases. Supply a reproducible prompt
78
- trial matrix and record actual results separately from unevaluated fresh-model
79
- trials. Test CLI results and ensure no connection/adapter execution or writes.
80
- - [x] **S6 · Make selected skills visible and finish review (P2).** Add useful
81
- Codex display metadata/example prompts and a concise selection announcement.
82
- Keep implicit invocation enabled. Validate metadata and installed copies; run
83
- full checks and all package smoke installs. Record final results and limits.
84
-
85
- ## Validation and failure protocol
86
-
87
- For each step, run the relevant existing tests plus meaningful regressions for
88
- changed runtime behavior. Run `pnpm format` and `pnpm check` before committing
89
- implementation. Run package smoke for the new skill and final package boundary.
90
- Docs/metadata checks validate syntax, resources and preservation; they do not
91
- substitute for observing a model handling a real request.
92
-
93
- If a check fails, repair that step before checking its box. If live evidence or
94
- an owner decision is unavailable, preserve the pending item and continue only
95
- independent authorized work. Do not weaken guards or simulate owner approval.
96
-
97
- ## Live acceptance
98
-
99
- - [ ] Fresh Codex sessions: ordinary requests select the appropriate installed
100
- skill and produce the required artifacts; record the actual loaded files.
101
- - [ ] A representative approved-reference variant is visually critiqued before
102
- expansion; owner reviews the result in a disposable authorized Penpot file.
103
- - [ ] A consumer's implemented route completes real Reflection comparison with
104
- approved references and independently observed browser state.
105
-
106
- Live trials remain pending by owner instruction. No extra agents or API-backed
107
- evaluation will be started without the required authorization.
108
-
109
- ## Completion reports
110
-
111
- - **PR handoff authorized · 2026-10-23.** Owner requested the branch push after
112
- the final readiness review. Local validation remains complete and main's SHA
113
- matches the reviewed base. Remote CI and owner merge review remain pending;
114
- no publication or live acceptance is implied by opening the PR.
115
-
116
- - **S6 completed · 2026-10-23.** Added Codex names, concise UI descriptions and
117
- explicit starting prompts for all six skills, retaining implicit invocation.
118
- Generated instructions ask for a brief selection announcement without treating
119
- it as verification. Metadata parsing and installation checks pass; final package
120
- smoke proves that metadata, checkpoint assets and `skills check` work from real
121
- installed tarballs. Reviewed scope, neutral boundaries, preservation, approval
122
- rules, local-command guidance and release notes. Final `pnpm check` passes
123
- **680 package tests + 3 convention tests**; all six package smoke installs,
124
- whitespace and exact-base PR release-note checks pass. Changesets proposes a
125
- patch for all six packages; every actual version remains **0.3.0**. No push,
126
- version bump, merge, publication, consumer modification or live Penpot write
127
- occurred. Fresh-model and live acceptance remain unchecked above.
128
-
129
- - **S5 completed · 2026-10-23.** Added offline `skills check` with versioned CLI
130
- results: valid project discovery/routing returns 0; incomplete readiness returns
131
- 3. Fourteen regressions cover partial and nested installs, instruction symlinks,
132
- missing/malformed/oversized inputs, dangling/external links, conflicting copies,
133
- modified files, disabled policy, resources, stale routes, no writes/extension
134
- execution and no raw link-content echo. Added a nine-request natural-language
135
- trial matrix and retained observed baseline skill reads separately from pending
136
- fresh-model trials. A read-only Tradient check correctly reports its older
137
- catalog-only routing and absent verification skill; no consumer files changed.
138
- Full checks pass (679 package tests + 3 convention tests). Session selection,
139
- global configuration and live visual quality are explicitly outside diagnostics.
140
-
141
- - **S4 completed · 2026-10-23.** Added a shared visual checkpoint template and
142
- source/candidate review procedure, routed through design, recipes, handoff and
143
- verification. It records preserved regions and intended changes, actual images,
144
- consequential findings, readiness and next action. Missing evidence blocks
145
- expansion in the skill workflow; no runtime command claims to measure taste or
146
- attest that an image was seen. Full checks pass (665 package tests + 3 convention
147
- tests), packaged links resolve, and a disposable install proved that a copied
148
- project-owned checkpoint survives forced skill refresh. Live critique remains
149
- pending.
150
-
151
- - **S3 completed · 2026-10-23.** Shipped `penpair-verify` as the sixth consumer
152
- skill, with ordinary parity/fix triggers and design/handoff routing. It records
153
- actual browser readiness, inspects images and recaptures scoped fixes without
154
- changing references or granting approval. Corrected both stale claims that the
155
- browser starter was still planned. Full checks pass (665 package tests + 3
156
- convention tests); all six package smoke installs pass and the installed Codex
157
- link resolves the new skill. Consumer browser/owner acceptance remains pending.
158
-
159
- - **S2 completed · 2026-10-23.** Front-loaded everyday task descriptions now
160
- distinguish design operations, state construction, design judgment and frontend
161
- implementation. Replaced the installer's line regex with bounded YAML data
162
- parsing so quoted/folded descriptions work and malformed or mismatched metadata
163
- fails clearly. Reused the workspace's pinned YAML version as a core dependency.
164
- Full checks pass: 665 package tests plus 3 convention tests, including 9 metadata
165
- and packaged-resource checks. No fresh-model selection claim is made.
166
-
167
- - **S1 completed · 2026-10-23.** Generated instructions now route matching tasks
168
- to selected skills before tool work instead of presenting only a directory.
169
- Partial installs emit no routes to unselected skills; nested encoded links
170
- resolve, repeat installation is unchanged and owner text is preserved. Full
171
- `pnpm check` passes: 656 package tests plus 3 convention tests. Selection and
172
- correct application by a fresh model remain live acceptance, not a claim of
173
- the installer.
174
-
175
- - **Plan prepared · 2026-10-23.** Created the branch from merged main and mapped
176
- all six proposed improvements to acceptance criteria and verification. The
177
- prior release cleanup is merged and its continuation workflow succeeded;
178
- package versions remain 0.3.0. No skill implementation has been checked off.
@@ -1,209 +0,0 @@
1
- # Tradient feedback: execution plan
2
-
3
- Created: 2026-10-22. Status: **phases 0–6 delivered and verified offline; final offline review complete; live Penpot gates and PP-07 causality remain open**.
4
-
5
- Goal: make the ordinary Penpair workflow complete the observed trial without a custom SDK host, then reduce the project glue needed for comparison and theme previews.
6
-
7
- Source: `feedback-0.2.0-2026-10-22.md` and its linked evidence in Tradient's `docs/penpair/`. The original report is outside this repository; phase 0 records a redacted, portable reproduction here. No consumer files are changed by this plan.
8
-
9
- ## Defaults and constraints
10
-
11
- - Cover all eight findings in phases. Milestone A is reliability; milestone B is comparison and preview capability. Use `codex/tradient-feedback`, with small verified commits. Milestone boundaries permit review; they do not authorize pushes, merges or publication.
12
- - Live acceptance uses a dedicated disposable copy, confirmed by its public file ID. No file has been selected or authorized by this plan. Until then, implement and test offline and leave the live boxes unchecked. Do not repurpose Tradient's existing file or its other pages implicitly.
13
- - Keep the core neutral. Library recipes, ownership migration and library-specific previews belong in adapters. Tradient's screen, trading data and theme names remain consumer-owned.
14
- - Retain file pins, one-shot writes, independent readback, uncertain journals and exact-artifact approval. Geometry stability is not pixel approval, font readiness or native component parity.
15
- - No token changes, native component generation, whole-file restore claim, two-person acceptance claim or edits to the adopting application are implicit in this work.
16
- - Preserve compatible public interfaces and result envelopes. Add optional evidence fields rather than renaming existing fields or changing their meaning. New commands/options require matching help, schemas where applicable, and negative parsing tests.
17
- - Use Changesets for release notes. All six repository package versions move together; the existing publishing exception may still skip only the unscoped wrapper. Do not bump versions during implementation.
18
-
19
- ## Repository and validation
20
-
21
- Baseline inspected: `main` at `57f9782`, all six packages at **0.2.0**. pnpm **10.12.1**, TypeScript **5.6.3**, Vitest **3.2.4**. Tests live in each package's `test/` directory. There is no repository lint script.
22
-
23
- | Purpose | Command |
24
- | --- | --- |
25
- | Build, types, tests and package-version/config rules | `pnpm check` |
26
- | Six tarballs installed and exercised in clean consumers | `pnpm smoke:package` |
27
- | Fast version/config guard | `pnpm check:versions` |
28
- | Targeted regression | `pnpm --filter PACKAGE exec vitest run test/FILE.test.ts` |
29
- | Whitespace | `git diff --check` |
30
-
31
- Run the relevant targeted suite while developing each phase, then `pnpm check` before committing it. Run package smoke after changes to shipped commands, adapters, skills/examples or dependencies and at final handoff. Do not substitute fake-provider tests for a real-browser acceptance result.
32
-
33
- Planning validation (2026-10-22): 73 existing targeted tests passed across core, adapter and comparison packages; the version/config guard, local document links and single-Now rule passed. Full `pnpm check` and package smoke were not rerun for this documentation-only change. These baseline results do not verify the proposed fixes or any live acceptance gate.
34
-
35
- ### Completion protocol
36
-
37
- Check a task only when its stated output is built and verified. Record offline and live status separately. Keep exactly one `Now` in `PLAN.md`; update it and the change log with each completed phase. If evidence changes the diagnosis, update this guide before implementing a different solution.
38
-
39
- After every phase, append a report below with **Resolved / Changed / Validated / Risks / Next**, date, commit, commands/results, and links to reviewed evidence. For investigations, distinguish **investigated** from **resolved**. A blocked live check never becomes a passing checkbox through elapsed time or synthetic evidence.
40
-
41
- ## Milestone A — reliable default workflow
42
-
43
- ### Phase 0 — reproduce and preserve the baseline
44
-
45
- - [x] Record the feedback version, package/agent/runtime versions and the relevant reproduction sources. Extract only credential-free minimal fixtures; do not copy the whole consumer runner or unreviewed logs.
46
- - [x] Run the existing layout/kit, migration, doctor, coordination and structural-snapshot suites. Record pre-existing failures separately.
47
- - [x] Add failing regressions before behavioral changes: native wait times out while geometry is stable; metadata-only snapshot migration; delayed own-lease save versus a real external edit; page switching delayed past the initial read.
48
- - [x] Prepare a public-ID-only scratch fixture manifest with two pages, one flex/text/token example and expected preservation checks. Keep credentials and private journals ignored.
49
-
50
- Tests: core `settle-integration.test.ts`, `kit.test.ts`, `external.test.ts`, `coordination.test.ts`, `journal.test.ts`, `structure-snapshot.test.ts`; adapter `migration.test.ts`, `commands.test.ts`.
51
-
52
- Exit: the confirmed layout and migration failures reproduce in controlled tests. PP-07/08 fixtures state which behavior is confirmed and which causal claim still needs live tracing. Lack of a live target does not prevent phase 1.
53
-
54
- ### Phase 1 — bounded layout fallback (PP-01, P1)
55
-
56
- Entry points: `packages/core/src/layout.ts`, `kit-source.ts`, operation settling and stable export callers.
57
-
58
- - [x] Extend `LayoutOptions` and kit `settle`/`flush` options with `strategy: auto | native | geometry`, default `auto`. Add `--layout auto|native|geometry` to `run-file`, `export` and `shots`; omit any unverified `off` mode. Existing SDK `layout:false` stays an explicit advanced-caller contract, not a suggested CLI workaround.
59
- - [x] Use one shared policy definition for host and kit behavior. Preserve existing total deadlines; cap an automatic native attempt at the smaller of **500 ms** and **one quarter of the remaining budget**. Leave time for geometry fallback rather than spending the full deadline on native waiting.
60
- - [x] In `auto`, fall back after an unsupported native API or an observed native wait failure when execution and target identity remain valid. A lost transport response, cancellation, changed target, malformed data or exhausted budget must not become success or trigger a write replay.
61
- - [x] Require three consecutive complete, equal geometry samples in geometry mode, with stable IDs/hierarchy and finite measurements; use the existing host/kit poll intervals. Duplicate IDs, cycles, truncation and node-budget excess refuse. In `native`, propagate native failure without fallback.
62
- - [x] Add optional attempt diagnostics to `LayoutResult`: selected strategy, native outcome, fallback reason and elapsed time. Preserve `stable`, `method` and `samples` meanings. Report verification failure after a partial flush through the existing journal/readback path.
63
-
64
- Tests: successful native path; unsupported/timed-out native with stable geometry; continually moving geometry; malformed/truncated samples; changed file/page; cancellation/deadline; bindings recorded only after valid settling; equivalent host/kit policy; CLI option rejection; stable PNG export still requires independent matching renders.
65
-
66
- Exit: core `native-api`, `settle-integration`, `kit`, `kit-integration`, `run-file`, `export` and `shots` tests pass, followed by full checks/package smoke.
67
-
68
- - [ ] **Live acceptance:** the shipped CLI and kit build the small scratch example, verify actual bindings and produce two stable exports without a consumer SDK runner. Repeating retains owned IDs and adds no duplicates. Look at the images; record native/fallback evidence.
69
-
70
- ### Phase 2 — explain upgrades and prove readiness (PP-02/03, P2)
71
-
72
- - [x] Add additive snapshot-check reason codes for missing snapshot, schema migration, missing ownership, content drift and metadata/hash mismatch. A stale result must always include a reason, even when the value diff is identical. Preserve stale/error exit-code distinctions.
73
- - [x] Reuse the existing `tokens migrate --from FILE --ownership FILE` preview and `--out NEW_FILE` write path. Diagnostics must point to that workflow, explain the schema change and request explicit classification of every legacy set. Do not invent ownership or regenerate away original provenance.
74
- - [x] Strengthen the existing doctor execution read rather than creating a duplicate readiness command. Add `doctor --timeout-ms N`, default **5000 ms**, valid **1000–30000 ms**, bounding origin, connection and execution work with cancellation.
75
- - [x] Generate a fresh challenge for the editor to echo with file/page identity. Report origin reachability, transport connection, fresh execution and file-pin match separately, with observed time/duration. Only measured layers may be healthy; unavailable heartbeat/version evidence stays unknown. Extend existing doctor JSON checks additively and keep endpoint redaction.
76
-
77
- Tests: adapter `migration`, `commands`, `command-contract`; core `external`, `connect`, `http-client`, `command-result`. Include old schema with unchanged values, missing ownership, invalid map, preserved provenance, stale challenge, wrong file, sleeping editor, timeout and secret-bearing failure text. Migration must require no live connection.
78
-
79
- Exit: the retained schema-1 fixture explains its failure and migrates without value/theme/provenance loss; doctor cannot report unqualified readiness from stale or incomplete execution evidence.
80
-
81
- - [ ] **Live acceptance:** compare responsive, foregrounded and deliberately disconnected scratch-editor states. Verify a new challenge and useful bounded failure messages. Do not deliberately interrupt a mutation for this test.
82
-
83
- ### Phase 3 — coordination evidence and page-aware snapshots (PP-07/08)
84
-
85
- - [x] Add redacted optional journal trace events around lease acquisition/check/release, inspection and observed revisions. Record source identities and timing without credentials, document text or whole catalogs in logs.
86
- - [x] Reproduce delayed lease persistence separately from external shape/token edits. First make no-op/reconciliation behavior observable; do not replace guards with sleeps or automatically ignore revision differences.
87
- - [x] **PP-07 decision gate:** if causal attribution is proven, fix the ordering of lease acquisition, target capture and inspection so the operation starts from its own independently read post-acquisition revision, while preserving conflict detection during inspection and before mutation. Test an external edit in each interval. If attribution remains unproven, deliver tracing/reproducer and retain PP-07 as unresolved; changing revision policy then requires a separately reviewed plan amendment.
88
- - [x] Replace the fixed page-switch sleep in `runOnPage` with bounded polling of the expected page ID: default **5000 ms**, **100 ms** intervals, limited by the enclosing command's remaining budget. Resolve a unique name once to an ID. A timeout identifies expected/observed page and stage.
89
- - [x] Serialize page-sensitive work on the same client through a shared page-session mechanism. Whole-file snapshots hold that session for the collection, capture pages sequentially, and restore the original visible page in `finally`. Unexpected external navigation causes a clear failure rather than silent mixing.
90
- - [x] Record per-page progress and timings. Preserve the original snapshot manifest on failure; diagnostic partial observations must never be assembled across revisions or published as a complete snapshot. Keep the original error if restoring the visible page also fails, and report both.
91
-
92
- Tests: core `coordination`, `journal`, `operation-recovery`, `operation`, `inspection`, `structure-snapshot`; add delayed page-switch and concurrent same-client collector tests. Include duplicate page names, removed pages, manual navigation, mid-capture file/token edits, deadline exhaustion and restoration after failure.
93
-
94
- Exit: multi-page fixtures succeed sequentially with correct identities and restore their starting page; failures preserve prior artifacts and identify the exact failed stage. PP-07 is either causally fixed with safety regressions or explicitly still unresolved.
95
-
96
- - [ ] **Live acceptance:** idle sequential operations, a controlled external scratch edit and a two-page snapshot. Confirm preservation of token definitions/order, global theme selections and unrelated objects.
97
-
98
- ### Phase 4 — help and composition guidance (PP-06, P3)
99
-
100
- - [x] Adapter-discovery slice: promote both companion roles in the README/setup guides and recommend the comparison adapter in shipped setup/handoff skills, with distinct installation and browser-readiness stages. This independent documentation slice does not complete the runtime help/composition work below.
101
-
102
- - [x] Group installed help around connect/diagnose, build, inspect/spec, snapshot/diff, capture/approve and compare. Include examples of actual installed syntax and link to limitations; do not invent new aliases merely to reorganize help.
103
- - [x] Add a short pre-build composition checklist to the design/recipe skills: primary user task, chosen existing reference, hierarchy, useful context, responsive/focus order, and a small first-frame critique before expanding variants. This records a design decision; it does not manufacture owner approval.
104
- - [x] Document migration previews, settling modes, doctor layers and snapshot recovery; remove suggestions to work around these with arbitrary waits.
105
-
106
- Tests: core `docs`, `skill-instructions`, `skills`, CLI help assertions and installed-package smoke. Verify instructions survive idempotent installation and no project names enter the neutral core.
107
-
108
- Exit: the inspect → spec → snapshot/diff → comparison path is discoverable from installed help; one trial can follow documented commands without reading package source.
109
-
110
- ## Milestone B — reduce consumer integration work
111
-
112
- ### Phase 5 — real browser comparison starter (PP-05, P2)
113
-
114
- - [x] Add a neutral example provider under `examples/reflection-browser/` for the existing `ImplementationProvider.runCase` contract. Use the adopter's pinned Playwright installation; no browser dependency or application framework enters the core. Ship it with the existing web documentation/examples mechanism and verify the installed path.
115
- - [x] Require project hooks for route, fixture, theme, state, capture root and expected fonts. Read actual state and loaded font faces/weights; never echo requested inputs as observed evidence.
116
- - [x] Park the pointer outside the capture region and verify no relevant hovered controls. Capture with explicit viewport, device scale **1** by default and a root bounding box after scroll/sticky layout settles. Round the box outward to whole CSS pixels and record the rule; do not resize images to improve a metric.
117
- - [x] Preserve the current schema-1 provider fields. Add optional capture metadata for root/clip, scale, browser version, font evidence and pointer checks; old providers remain readable. The example requires its complete metadata and flags missing evidence instead of substituting defaults silently.
118
- - [x] Validate paths/hashes and compare through the existing adapter. Retain `owner-review-required`; a pixel score never approves a baseline. Unapproved trial captures may test the capture helper, but the approval gate for `reflection check` stays intact.
119
-
120
- Tests: adapter `integration.test.ts` plus new provider/capture fixtures for wrong state/theme, delayed/missing fonts, hover contamination, sticky shell, fractional crop boundaries, unchanged baseline bytes and dimension/scale mismatch. Exercise a real local example in the browser at desktop/mobile × light/dark × loaded/empty; unit stubs alone do not complete this phase.
121
-
122
- Exit: an adopter can supply explicit setup hooks and run a genuine comparison without rewriting capture plumbing. No Tradient route/provider is registered by modifying its repository here.
123
-
124
- ### Phase 6 — explicit, isolated theme previews (PP-04, P2)
125
-
126
- - [x] Record the pinned API's frame-level theme capabilities with links and observed proof. Do not expose native per-frame binding as supported based on an API name or projected appearance.
127
- - [x] Deliver a deterministic offline preview first: neutral token-projection logic plus adapter command `penpair marwes tokens preview --from SNAPSHOT --theme NAME [--out FILE]`. Resolve the selected declared theme using existing token precedence/alias rules; ambiguous names, missing dependencies or unsupported values produce errors/explicit unknowns.
128
- - [x] Return a versioned preview with source hash, selected theme/set identities, resolved values/unknowns and `kind: projected-theme-preview`. `--out` writes only a project-bound artifact. It does not mutate Penpot, switch global themes or imply native bindings.
129
- - [x] Supply a scratch example applying projected color values to owned roots, with projection metadata retained separately from actual typography/spacing/radius bindings. Native frame-mode support remains a separate acceptance gate if it cannot be proved on the pinned version.
130
-
131
- Tests: adapter preview/command-contract tests and neutral resolver tests: multiple themes, ordering, aliases/cycles, composite values, ambiguous names and missing values. Before/after scratch checks must show identical global selections, catalog values/order and unrelated objects.
132
-
133
- Exit: simultaneous light/dark preview artifacts are reproducible and accurately labeled. Native component anatomy, override preservation and native per-frame color bindings remain unclaimed unless independently proven.
134
-
135
- ## Final integration and release gate
136
-
137
- - [ ] Re-run the eight-case scratch trial using shipped CLI/kit paths, a repeat build and one heading change. Compare IDs, bindings, geometry, native/browser images and changed fields. Record observed timings, unknowns and interventions.
138
- - [ ] Confirm no consumer-side timeout bypass, fixed inter-operation sleep or fabricated provider evidence is needed for the covered paths.
139
- - [x] Run `pnpm check`, `pnpm smoke:package` and whitespace checks. Record the actual final test count and installed-package results; do not assume the 0.2.0 baseline count remains current.
140
- - [x] Add Changesets per package behavior: fixes as patch, new public options/provider/preview capabilities as minor. The generated version PR selects the highest bump for every package; no manual version bump or release activation change belongs here.
141
- - [x] Review the branch, evidence and remaining PP-07/native-mode/live gates; see the [branch review and acceptance checklist](tradient-feedback-review.md).
142
- - [ ] Obtain owner decisions before any push/PR, merge, publish or non-scratch write.
143
-
144
- If the scratch target is unavailable, code may be reviewed with live checks still pending, but the release must not claim those checks passed. No rollback or exactly-once guarantee is introduced. On an uncertain write: stop, retain the journal, inspect independently, reconcile only owned changes and resume explicitly. After repeated failure, record the trace and narrow the reproducer; never relax a guard to get a green report.
145
-
146
- ## Completion tracker and reports
147
-
148
- | Phase | Status | Offline evidence | Live evidence | Completed |
149
- | --- | --- | --- | --- | --- |
150
- | 0 Baseline/reproducers | Complete offline | 587 tests; explicit expected-failure reproducers | Target pending | 2026-10-22 |
151
- | 1 Layout | Complete offline | 597 tests; six-package smoke pass | Pending | 2026-10-22 |
152
- | 2 Migration/readiness | Complete offline | 607 tests; six-package smoke pass | Pending | 2026-10-22 |
153
- | 3 Coordination/snapshots | Offline delivery complete; PP-07 unresolved | 614 tests; six-package smoke pass | Pending | 2026-10-22 |
154
- | 4 Help/skills | Complete | 615 tests; six-package smoke pass | Not applicable | 2026-10-22 |
155
- | 5 Browser starter | Complete | 616 tests; package smoke; 8 real-browser cases + negative cases | Local Chromium trial complete; Penpot pending | 2026-10-22 |
156
- | 6 Theme previews | Complete offline | 622 tests; six-package smoke pass | Scratch/native capability pending | 2026-10-22 |
157
- | Final trial/release review | Offline review complete; owner/live pending | 630 tests; six-package smoke; real browser matrix | Penpot target pending | 2026-10-22 (offline) |
158
-
159
- Append phase reports here during execution. Update the table and relevant `PLAN.md` checkbox in the same verified change.
160
-
161
- ### 2026-10-22 — Companion discovery (phase 4 documentation slice)
162
-
163
- **Resolved:** Readers and agents can now discover why to add the library and frontend-comparison adapters, with Reflection Check recommended when implementing and verifying frontend code.
164
-
165
- **Changed:** Added a companion selection/setup/readiness guide, promoted both roles in README and onboarding docs, updated shipped setup/handoff/recipe skills and project-facts guidance, and added a matching-version registration path. Kept adapter dependencies explicit and the browser starter planned. No runtime help/composition or reliability fix is claimed by this documentation slice.
166
-
167
- **Validated:** `pnpm check` passes (583 tests), including navigation/anchors, core/skill neutrality and skill installation. All six package smoke installs pass; the command tarball includes the new adapter guide. Added patch changesets for the affected shipped packages.
168
-
169
- **Risks:** These guidance changes need the next reviewed release and skill refresh to reach existing installations. Browser verification still requires approved baseline/case evidence and a real provider; automatic bundling/setup was not added. No version bump, push, merge or publish was performed.
170
-
171
- **Next:** Phase 0 remains the runtime entry point; phase 5 supplies the real-browser starter. Phase 4's help/composition tasks remain unchecked.
172
-
173
- ### Phase 0 report — 2026-10-22
174
-
175
- **Resolved:** portable, credential-free reproductions now distinguish confirmed defects from suspected live causes. **Changed:** [baseline evidence](../fixtures/feedback-reproductions.md), scratch manifest template, native timeout/metadata/delayed-page expected-failure tests and conservative delayed-revision fixture. **Validated:** existing targeted suites: 55 tests; reproducers: 4 tests; `pnpm check`: 587 tests pass, including three explicitly expected failures. **Risks:** expected-failure tests demonstrate missing behavior; they do not verify fixes. No live target or lease causality proof. **Next:** phase 1 shared layout fallback. Commit: `test: preserve adoption failure reproductions`.
176
-
177
- ### Phase 1 report — 2026-10-22
178
-
179
- **Resolved:** idle native failure no longer blocks the default workflow when independent complete geometry settles. **Changed:** one static host/kit policy, bounded native attempts, three equal hierarchy-aware samples, diagnostics and CLI `--layout`; no write retry. **Validated:** native success/failure/hang, node overflow/cycles, target/transport refusal, kit binding and stable-render tests; `pnpm check` passes 597 tests and six-package smoke passes. **Risks:** geometry is neither visual approval nor font readiness; live CLI/kit build remains pending. **Next:** migration explanations and bounded doctor readiness. Commit: `feat: share bounded layout fallback across host and kit`.
180
-
181
- ### Phase 2 report — 2026-10-22
182
-
183
- **Resolved:** metadata-only stale snapshots now explain schema/ownership/hash causes; transport connection alone cannot prove editor readiness. **Changed:** additive reason codes and existing migration guidance; bounded origin/transport/challenge execution/file-pin layers, timestamps and duration, default 5 s doctor with 1–30 s option. Docker uses the same fresh-read proof. **Validated:** 74 targeted tests, stale/missing challenges, wrong file, sleeping origin/editor, timeout validation and secret redaction; `pnpm check` 607 tests and six-package smoke pass. **Risks:** real background/disconnected editor tests remain pending; heartbeat/version are unknown unless observed. **Next:** coordination trace and serialized page sessions. Commit: `feat: explain migration drift and prove fresh doctor readiness`.
184
-
185
- ### Phase 3 report — 2026-10-22
186
-
187
- **Resolved:** delayed synthetic navigation and overlapping same-client collectors now use observed IDs and serialized sessions, restoring the starting page. **Changed:** page/session guards shared by derived clients, bounded polling, per-page progress and separate restoration errors; optional `--trace --apply` journal lease/revision events (also token pushes). **Validated:** real plugin bodies cover delayed switches, concurrent collectors, manual navigation, removed/ambiguous pages, revision changes, restoration failure and cross-client writer contention; `pnpm check` 614 tests and six-package smoke pass. **Risks:** PP-07 remains **unresolved**: delayed own saves and external edits cannot be causally distinguished with current evidence. Revision guards are unchanged. Live sequential/external-edit tests pending. **Next:** installed help and composition guidance. Commit: `feat: serialize observed page sessions and trace writer revisions`.
188
-
189
- - [ ] PP-07 follow-up: obtain scratch trace proving delayed writer-marker persistence, then separately review any change to revision ordering. Tracing and conservative conflict refusal are delivered; no race fix is claimed.
190
-
191
- ### Phase 4 report — 2026-10-22
192
-
193
- **Resolved:** installed help now exposes the full inspect/spec/snapshot/capture/compare workflow; composition guidance catches under-designed first frames before multiplying variants. **Changed:** task-grouped actual command examples, composition checklist in shipped skills, and migration/layout/doctor/snapshot/recovery docs. Corrected old help wording that implied updating an image alone approves it. **Validated:** help, docs, neutral-core and idempotent skill installation tests; `pnpm check` 615 tests and six-package smoke pass. **Risks:** composition remains a human/agent judgment step; a checklist does not establish visual quality or owner approval. **Next:** real-browser comparison starter. Commit: `docs: expose the complete workflow and first-frame composition checks`.
194
-
195
- ### Phase 5 report — 2026-10-22
196
-
197
- **Resolved:** adopters can reuse real capture plumbing with explicit project hooks rather than rewrite fonts/scroll/hover/cropping logic. **Changed:** shipped browser provider, independent DOM state and loaded font/weight evidence, outward CSS clipping, hover/occlusion checks, optional schema-1 metadata validation and installed-example smoke. **Validated:** `pnpm check` 616 tests and six-package smoke pass; eight real local browser cases plus wrong theme, missing face/weight, delayed font load, scale mismatch, hover and sticky-shell refusal. Actual screenshots were inspected; a sticky header initially obscured the heading and the new guard/scroll hook corrected it. [Portable browser evidence](../fixtures/browser-capture-2026-10-22.json) records Chromium 148.0.7778.96, bundled Playwright 1.62.1, unchanged reference bytes and owner-review-required. MCP could inspect the fixture but could not import modules; the real provider ran with the bundled runtime and cached Chromium. **Risks:** references are explicitly unapproved synthetic browser fixtures, not approved Penpot designs; sampled occlusion still requires image inspection. No consumer provider was registered. **Next:** offline projected themes and pinned native capability evidence. Commit: `feat: ship a verified real-browser comparison starter`.
198
-
199
- ### Phase 6 report — 2026-10-22
200
-
201
- **Resolved:** independent light/dark artifacts can be generated without switching live themes or falsely claiming native frame modes. **Changed:** bounded neutral projection resolver shared with mode verification; adapter `tokens preview --from --theme [--out]`, discoverable artifact schema, source/theme/set provenance and owned scratch example. **Validated:** ordered precedence, aliases/arithmetic, composites, ambiguous/missing themes/sets, cyclic/budget failures, project-bound output and preservation through actual sandbox example bodies; `pnpm check` 622 tests and six-package smoke pass. **Risks:** [pinned capability evidence](../theme-previews.md#pinned-native-capability-evidence) is source-based; the hosted API version is distinct. Native frame themes, component parity/overrides and live projection preservation remain unproved. **Next:** full branch review, final browser/package validation and explicit live checklist. Commit: `feat: project declared themes without changing live selection`.
202
-
203
- ### Final boundary review report — 2026-10-22
204
-
205
- **Resolved:** cancelling a queued collector no longer opens a parallel page queue while its predecessor is still active. **Changed:** deferred queue cleanup, stricter geometry/hierarchy and doctor identity validation, correct doctor range text, bounded browser animation-frame waits. **Validated:** the queue regression failed before the fix and passes afterward; cancellation after a delivered read performs no second observation. Malformed native/geometry/root/sibling evidence refuses. `pnpm check`: 630 tests; all six package smoke installs; eight real local browser cases plus six rejection cases and delayed fonts pass. **Risks:** live gates and PP-07 causality remain open. **Next:** owner branch review and separately authorized scratch acceptance. Commit: `fix: preserve cancellation and evidence boundaries`.
206
-
207
- ### Final handoff — 2026-10-22
208
-
209
- **Resolved:** all authorized code phases and offline/local-browser acceptance are complete on the review branch. **Changed:** [consolidated branch report](tradient-feedback-review.md) maps every finding to its delivered outcome, evidence and remaining live checks. **Validated:** 630 tests, six installed package families, eight real browser cases and six rejection cases; build/types/version/whitespace checks pass. **Risks:** PP-07 causality, live Penpot build/repeat/heading and multi-page trials, native frame-theme proof and owner release decisions remain unchecked. **Next:** owner branch review and confirmed disposable-file acceptance; no credentials are requested and no publication was attempted.
@@ -1,83 +0,0 @@
1
- # Adoption feedback branch review
2
-
3
- Date: 2026-10-22. Branch: `codex/tradient-feedback`. Base: `57f9782`.
4
-
5
- Code phases 0–6 are implemented and verified. The branch is ready for owner review. Live Penpot acceptance remains pending; the lease/save race is investigated rather than claimed fixed. The owner has authorized pushing this branch and opening its feature PR. No version bump, merge or publication was performed. All six repository versions remain 0.2.0.
6
-
7
- ## What each update resolves
8
-
9
- | Finding | Delivered result | Verification and limit |
10
- | --- | --- | --- |
11
- | PP-01: native layout timeout blocks default build | Shared bounded auto/native/geometry policy for SDK and kit; CLI selection; three complete matching geometry/hierarchy samples | Native success/failure/hang, transport/cancellation/malformed/target refusal and independent matching exports tested; real Penpot build pending |
12
- | PP-02: unexplained metadata-only token drift | Stable reason codes and explicit existing ownership migration guidance | Legacy values unchanged while schema/hash differs reproduces and explains staleness; migration preserves provenance |
13
- | PP-03: readiness is unclear | Bounded origin, transport, fresh execution challenge, file/page identity and file-pin evidence | Sleeping origin/editor, stale/malformed challenge, wrong pin and redaction tested; real editor state trials pending |
14
- | PP-04: simultaneous theme preview needs custom glue | Offline versioned projection, shared ordered alias resolver, adapter command and owned-root example | Precedence, composites, unknowns and sandbox preservation tested; native frame themes remain unproved |
15
- | PP-05: real comparison provider is missing | Packaged browser starter with project hooks, actual state/fonts, pointer, occlusion and crop evidence | Eight real local Chromium cases, delayed fonts and six rejection cases; unapproved synthetic references do not establish Penpot parity |
16
- | PP-06: workflow/companions are hard to discover | Companion setup guide, grouped installed help and first-frame composition checklist | Help, docs, core neutrality and idempotent installed skills tested; composition still requires judgment |
17
- | PP-07: suspected self-save revision conflict | Optional redacted lease/inspection/revision traces and conservative reproducer | **Unresolved causality.** Own delayed persistence and external edits still conflict; no revision guard was relaxed |
18
- | PP-08: multi-page snapshots fail | Observed page-ID polling, serialized sessions, per-page progress and starting-page restoration | Delayed/concurrent collectors, manual navigation, source edits and restoration failures tested; real multi-page trial pending |
19
-
20
- The final review also reproduced and fixed cancellation allowing a third collector to bypass an active session. Queue order now survives cancellation. Layout and doctor reject malformed evidence, and browser frame sampling has a deadline.
21
-
22
- ## Repository readability follow-up
23
-
24
- Biome 2.6.2 supplies a separately committed formatting baseline (`b1a9445`).
25
- [Conventions and executable examples](../conventions/README.md), an `AGENTS.md`
26
- reference and the repository-local coding skill now guide naming and module
27
- boundaries. `pnpm check` also enforces formatting, focused lint rules, kebab-case
28
- code paths and checked templates. The comparison adapter is split into focused
29
- modules with its existing public entrypoint intact. The
30
- [completion checklist/report](../conventions/completion-2026-10-22.md) explains
31
- what each change resolves and the remaining formatter/review limits.
32
-
33
- ## Validation
34
-
35
- - `pnpm check`: **643 tests** pass (core 498, Docker 28, token adapter 99, comparison adapter 15, convention examples 3), style/path checks, build/typecheck and six-package version guard pass.
36
- - `pnpm smoke:package`: all **six tarballs** install and run in clean consumers. Installed help, skills, adapter documentation and browser starter are verified, including the comparison adapter's preserved runtime exports and public TypeScript declarations.
37
- - Real browser trial: bundled Playwright **1.62.1**, cached Chromium **148.0.7778.96**; desktop/mobile × light/dark × loaded/empty. Missing/wrong font face/weight, wrong theme, scale mismatch, hover contamination and sticky occlusion refuse; delayed font loading succeeds. Baseline bytes remain unchanged and verdict stays `owner-review-required`.
38
- - Actual captures were visually inspected. That inspection found a sticky header hiding the heading; an occlusion guard and explicit project scroll hook corrected it. [Portable evidence](../fixtures/browser-capture-2026-10-22.json) records the cases without machine paths or credentials.
39
- - `git diff --check` passes. Changesets cover fixes and new public capabilities; repository versions are unchanged.
40
-
41
- ## Commits
42
-
43
- | Step | Commit |
44
- | --- | --- |
45
- | Baseline/reproductions | `cc65514` |
46
- | Bounded layout | `2c60ac5` |
47
- | Migration/readiness | `b985dc2` |
48
- | Coordination/snapshots | `b51ad30` |
49
- | Help/composition | `81f20d3` |
50
- | Browser starter | `79e8c8e` |
51
- | Projected themes | `415b291` |
52
- | Final boundary fixes | `5bcc687` |
53
-
54
- ## Remaining acceptance
55
-
56
- - [x] Owner authorizes pushing the branch and opening its feature PR (2026-10-22).
57
- - [ ] Owner reviews the branch before merge or release work.
58
- - [ ] Owner confirms a disposable Penpot copy by public file ID; populate the [scratch manifest](../fixtures/feedback-scratch.template.json). No credentials belong in it.
59
- - [ ] Run shipped CLI/kit build, repeat it and change one heading across the eight cases; independently compare IDs, bindings, geometry and two inspected exports.
60
- - [ ] Verify fresh doctor reads with responsive/background/disconnected scratch editor states.
61
- - [ ] Capture idle/no-op and controlled external-edit traces; establish PP-07 causality before reviewing a revision-order change.
62
- - [ ] Run a two-page snapshot with restoration and projected-color preservation checks for global selections, catalog/order and unrelated objects.
63
- - [ ] Prove any native frame-theme or component override capability separately; projected appearance is insufficient.
64
- - [ ] After owner review and acceptance decisions, prepare the release through Changesets and existing protected publication workflow.
65
-
66
- The [living execution guide](tradient-feedback-0.2.0.md) contains the per-phase Resolved / Changed / Validated / Risks / Next reports. Pending live items remain unchecked; this branch does not claim rollback, exactly-once writes, native component parity or human visual approval.
67
-
68
- ## Release readiness check — 2026-10-22
69
-
70
- - [x] Working branch is based on remote main (`57f9782`) verified during the readiness check.
71
- - [x] Pending Changesets plan **0.3.0 for all six packages** without changing versions on this feature branch.
72
- - [x] GitHub has both release activation variables set to `true`, and `CHANGESETS_PR_TOKEN` is present. Both release workflows are active; recent version-PR workflow runs succeeded.
73
- - [x] `npm-release` allows the `main` branch and requires the owner as reviewer, with self-review allowed.
74
- - [x] The temporary `PENPAIR_RELEASE_EXCLUDE_PENPAIR=true` exception remains enabled: all six repository versions advance together, while the five scoped packages must publish and verify.
75
- - [x] Remove trailing whitespace from the added font license without changing its text, and replace stale hardcoded versions in the release guide. Branch whitespace checks and current style checks pass.
76
- - [ ] Push/open the feature PR and pass its remote CI before merging.
77
- - [ ] Review/merge the generated **Release Penpair** version PR, approve the environment and verify the five required registry versions/provenance.
78
-
79
- The code is ready for a feature PR with the live acceptance limits above visible.
80
- Its merge does not publish: it creates/updates the version PR. Publication runs
81
- after that separate PR is merged and the environment is approved. The recent
82
- publish workflows were skipped; this check verifies repository configuration,
83
- not a completed npm OIDC publication or npm account publisher permissions.