@warpgogol/forge 0.28.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +16 -0
- package/README.md +4 -4
- package/README.uk.md +4 -4
- package/dist/os/core/core.module.d.ts.map +1 -1
- package/dist/os/core/core.module.js +34 -0
- package/dist/os/core/core.module.js.map +1 -1
- package/dist/os/program/discovery.d.ts +61 -0
- package/dist/os/program/discovery.d.ts.map +1 -0
- package/dist/os/program/discovery.js +236 -0
- package/dist/os/program/discovery.js.map +1 -0
- package/dist/os/program/handlers/complete.d.ts +12 -0
- package/dist/os/program/handlers/complete.d.ts.map +1 -0
- package/dist/os/program/handlers/complete.js +344 -0
- package/dist/os/program/handlers/complete.js.map +1 -0
- package/dist/os/program/handlers/lease.d.ts +13 -0
- package/dist/os/program/handlers/lease.d.ts.map +1 -0
- package/dist/os/program/handlers/lease.js +322 -0
- package/dist/os/program/handlers/lease.js.map +1 -0
- package/dist/os/program/handlers/seal.d.ts +12 -0
- package/dist/os/program/handlers/seal.d.ts.map +1 -0
- package/dist/os/program/handlers/seal.js +265 -0
- package/dist/os/program/handlers/seal.js.map +1 -0
- package/dist/os/program/handlers/validate.d.ts +14 -0
- package/dist/os/program/handlers/validate.d.ts.map +1 -0
- package/dist/os/program/handlers/validate.js +164 -0
- package/dist/os/program/handlers/validate.js.map +1 -0
- package/dist/os/program/lease.d.ts +39 -0
- package/dist/os/program/lease.d.ts.map +1 -0
- package/dist/os/program/lease.js +129 -0
- package/dist/os/program/lease.js.map +1 -0
- package/dist/os/program/program.module.d.ts +3 -0
- package/dist/os/program/program.module.d.ts.map +1 -0
- package/dist/os/program/program.module.js +201 -0
- package/dist/os/program/program.module.js.map +1 -0
- package/dist/os/program/schemas.d.ts +225 -0
- package/dist/os/program/schemas.d.ts.map +1 -0
- package/dist/os/program/schemas.js +174 -0
- package/dist/os/program/schemas.js.map +1 -0
- package/dist/os/program/state.d.ts +38 -0
- package/dist/os/program/state.d.ts.map +1 -0
- package/dist/os/program/state.js +189 -0
- package/dist/os/program/state.js.map +1 -0
- package/dist/os/rfc/handlers/archive.d.ts +1 -0
- package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
- package/dist/os/rfc/handlers/archive.js +54 -0
- package/dist/os/rfc/handlers/archive.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +15 -15
- package/profiles/astro-typescript-turborepo.yaml +1 -1
- package/profiles/editframe.yaml +2 -2
- package/profiles/forge-shell.yaml +1 -1
- package/profiles/godot-csharp.yaml +388 -0
- package/profiles/phaser-turborepo.yaml +1 -1
- package/skills/fo/ef-onboard/SKILL.md +1 -1
- package/skills/fo/fo-idea/SKILL.md +2 -2
- package/skills/fo/fo-idea-implement/SKILL.md +1 -1
- package/skills/fo/fo-step-commit/SKILL.md +7 -5
- package/skills/shared/grilling/learned-principles.archive.md +212 -0
- package/skills/shared/grilling/learned-principles.md +0 -13
- package/skills/shared/grilling/qa-log.md +624 -0
- package/skills/shared/knowledge/learned-principles.md +99 -0
|
@@ -107,3 +107,627 @@ status: active
|
|
|
107
107
|
- **Context:** 2026-08-03 — grilling RFC-0663 plan (dogfood acceptance criterion)
|
|
108
108
|
- **Question:** RFC requires "at least one real duplicate pair promoted end-to-end" but the current monorepo has very few L2 entries across skills. Real duplicates are unlikely. How to handle the dogfood criterion?
|
|
109
109
|
- **Answer:** Conditional dogfood: run detection on the monorepo. If duplicates found, promote with operator approval. If none found, the detection pipeline running end-to-end (detection → doctor report → zero duplicates) serves as evidence. Promotion mechanics are verified by unit tests. Creating artificial test duplicates is not natural and would not test the real promotion path.
|
|
110
|
+
|
|
111
|
+
### K-0009: Certification semantics for missing or stale evidence
|
|
112
|
+
|
|
113
|
+
```knowledge-entry
|
|
114
|
+
id: K-0009
|
|
115
|
+
layer: L0
|
|
116
|
+
created: 2026-08-14
|
|
117
|
+
status: active
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
121
|
+
- **Question:** How should release certification represent required evidence that is absent, outdated, or belongs to a different commit, configuration, or toolchain?
|
|
122
|
+
- **Answer:** Certification uses explicit `pass`, `fail`, `incomplete`, and `stale` states. Missing evidence must never be synthesized as success. Local authoring may continue with `incomplete` evidence so that content creation remains possible, but Alt/Main transitions require `pass`; `fail`, `incomplete`, and `stale` all block publication.
|
|
123
|
+
|
|
124
|
+
### K-0010: Identity of the certified release candidate
|
|
125
|
+
|
|
126
|
+
```knowledge-entry
|
|
127
|
+
id: K-0010
|
|
128
|
+
layer: L0
|
|
129
|
+
created: 2026-08-14
|
|
130
|
+
status: active
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
134
|
+
- **Question:** What exact object receives a readiness certificate?
|
|
135
|
+
- **Answer:** Certification applies to an immutable release candidate, not to a site in general, a branch, a mission, or a URL. The identity binds at least `systemId`, `releaseId`, exact source commit, content and build-artifact hashes, configuration/policy/toolchain versions, and the evidence environment. Dev, Alt, and Main promote the same artifact without rebuilding; any bound-identity change invalidates the certificate and requires a new candidate and fresh evidence.
|
|
136
|
+
|
|
137
|
+
### K-0011: Ownership boundary for release certification
|
|
138
|
+
|
|
139
|
+
```knowledge-entry
|
|
140
|
+
id: K-0011
|
|
141
|
+
layer: L0
|
|
142
|
+
created: 2026-08-14
|
|
143
|
+
status: active
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
147
|
+
- **Question:** Should release certification belong to the stack-agnostic Werkstatt engine or to the site plugin?
|
|
148
|
+
- **Answer:** The engine owns the certificate schema and lifecycle, candidate identity checks, storage, invalidation, and promotion enforcement. The one active stack plugin supplies the required-evidence profile and evidence producers. Universal integrity, provenance, freshness, and completeness rules stay in the engine; site-content, accessibility, SEO, Lighthouse, visual, and Astro-specific checks stay in `@warpgogol/werkstatt-site`. Existing closed `checkGate` and `releaseEvidence` plugin hooks must be used strictly or superseded explicitly rather than bypassed with an ad hoc sixth hook.
|
|
149
|
+
|
|
150
|
+
### K-0012: Stage-specific decisions in one append-only certification dossier
|
|
151
|
+
|
|
152
|
+
```knowledge-entry
|
|
153
|
+
id: K-0012
|
|
154
|
+
layer: L0
|
|
155
|
+
created: 2026-08-14
|
|
156
|
+
status: active
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
160
|
+
- **Question:** Should certification be one final flag, separate certificates per channel, or one dossier with stage-specific gate decisions?
|
|
161
|
+
- **Answer:** Each immutable release candidate has one append-only certification dossier containing immutable, environment-bound evidence records and separate `dev-deploy`, `propagate-alt`, and `promote-main` decisions. Every decision uses `pass`, `fail`, `incomplete`, or `stale`; only the current `pass` for the relevant gate permits its transition. Re-runs append evidence and a new decision instead of overwriting history, while later gates may consume the required earlier evidence chain.
|
|
162
|
+
|
|
163
|
+
### K-0013: Versioned certification profile as the normative gate policy
|
|
164
|
+
|
|
165
|
+
```knowledge-entry
|
|
166
|
+
id: K-0013
|
|
167
|
+
layer: L0
|
|
168
|
+
created: 2026-08-14
|
|
169
|
+
status: active
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
173
|
+
- **Question:** What is the authoritative source for the required checks at each certification gate?
|
|
174
|
+
- **Answer:** Each stack plugin supplies one declarative, versioned certification profile as the sole normative source for gate composition. Every requirement has a stable id, applicability, gate placement, required/conditional/advisory classification, expected evidence type and producer, permitted environment, freshness and candidate-binding rules, timeout/retry policy, recovery diagnostic, and normative RFC/DNA/spec reference. The engine rejects structurally invalid profiles, and the profile hash is bound into candidate identity so policy cannot change invisibly after evidence collection.
|
|
175
|
+
|
|
176
|
+
### K-0014: Deterministic aggregation of certification requirements
|
|
177
|
+
|
|
178
|
+
```knowledge-entry
|
|
179
|
+
id: K-0014
|
|
180
|
+
layer: L0
|
|
181
|
+
created: 2026-08-14
|
|
182
|
+
status: active
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
186
|
+
- **Question:** How should individual requirement outcomes aggregate into a stage-gate decision?
|
|
187
|
+
- **Answer:** Applicability is evaluated explicitly; a conditional requirement that does not apply records `not-applicable` plus its reason. Fresh required failures produce `fail`; candidate/policy identity mismatches produce `stale`; missing evidence, timeouts, producer crashes, infrastructure unavailability, malformed output, or unclassified results produce `incomplete`. A gate passes only when every applicable required requirement has a current `pass`; advisory results remain visible but do not change status. Mixed problems use top-level precedence `fail` → `stale` → `incomplete` → `pass`, while all non-pass states block Alt/Main.
|
|
188
|
+
|
|
189
|
+
### K-0015: Agent-only independent qualitative evaluation
|
|
190
|
+
|
|
191
|
+
```knowledge-entry
|
|
192
|
+
id: K-0015
|
|
193
|
+
layer: L0
|
|
194
|
+
created: 2026-08-14
|
|
195
|
+
status: active
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
199
|
+
- **Question:** If the authoring agent cannot approve its own qualitative work and the workflow uses agents only, who supplies approval evidence?
|
|
200
|
+
- **Answer:** A separate read-only Evaluator Agent run, with a clean context and a versioned rubric, evaluates rendered pages, screenshots, source content/claims, and the business brief and emits structured qualitative evidence. The deterministic Certification Engine—not the evaluator—computes the gate decision. One evaluator is sufficient for ordinary releases; critical or borderline cases require consensus from two independent evaluator runs. The process requires no human approver, and the authoring agent cannot submit its own approving qualitative evidence.
|
|
201
|
+
|
|
202
|
+
### K-0016: No agent waivers for required certification requirements
|
|
203
|
+
|
|
204
|
+
```knowledge-entry
|
|
205
|
+
id: K-0016
|
|
206
|
+
layer: L0
|
|
207
|
+
created: 2026-08-14
|
|
208
|
+
status: active
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
212
|
+
- **Question:** May an agent bypass, suppress, or downgrade a required certification requirement to promote a new release?
|
|
213
|
+
- **Answer:** No runtime agent waiver exists for required Alt/Main requirements: no force, skip-gate, grace-period, or automatic required-to-advisory downgrade. Suppressions apply only to advisory diagnostics. A required false positive must be fixed in its producer or through a normative, versioned certification-profile change that invalidates prior evidence and triggers recertification. Infrastructure unavailability remains `incomplete`. The only bypass-like operation is rollback to a previously certified immutable artifact, which is recovery rather than promotion of a new candidate.
|
|
214
|
+
|
|
215
|
+
### K-0017: Mandatory quality dimensions for the site certification profile
|
|
216
|
+
|
|
217
|
+
```knowledge-entry
|
|
218
|
+
id: K-0017
|
|
219
|
+
layer: L0
|
|
220
|
+
created: 2026-08-14
|
|
221
|
+
status: active
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, site certification profile v1
|
|
225
|
+
- **Question:** Which quality dimensions must the first site certification profile cover before Main promotion?
|
|
226
|
+
- **Answer:** The profile must cover nine dimensions: candidate integrity; business truth and compliance; editorial quality and localization; information architecture and discoverability; UX and conversion; visual quality and accessibility; performance and runtime correctness; security and operational readiness; and independent qualitative evaluation. Each dimension must have at least one applicable required evidence item before Main. A genuinely irrelevant dimension requires explicit, verifiable `not-applicable` evidence; silent omission is invalid.
|
|
227
|
+
|
|
228
|
+
### K-0018: Stage placement of site certification evidence
|
|
229
|
+
|
|
230
|
+
```knowledge-entry
|
|
231
|
+
id: K-0018
|
|
232
|
+
layer: L0
|
|
233
|
+
created: 2026-08-14
|
|
234
|
+
status: active
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, site certification profile v1
|
|
238
|
+
- **Question:** How should required evidence be distributed across Authoring, Dev, Alt, and Main?
|
|
239
|
+
- **Answer:** Authoring may remain `incomplete`. The `dev-deploy` gate requires a pass for all pre-deploy evidence available from immutable source/content/artifact identity, build, schemas, business truth, authored content, and static safety contracts. Dev then produces rendered, browser, integration, performance, accessibility, and independent-evaluator evidence; `propagate-alt` requires all nine quality dimensions covered from Dev. Alt rechecks environment-dependent URL/DNS/routes, headers, integrations, runtime, screenshots, and qualitative evidence; `promote-main` reuses still-current environment-independent evidence and requires current Alt evidence for environment-dependent requirements. Cross-environment reuse is forbidden unless the profile explicitly classifies the evidence as environment-independent.
|
|
240
|
+
|
|
241
|
+
### K-0019: Transactional Main verification and automatic rollback
|
|
242
|
+
|
|
243
|
+
```knowledge-entry
|
|
244
|
+
id: K-0019
|
|
245
|
+
layer: L0
|
|
246
|
+
created: 2026-08-14
|
|
247
|
+
status: active
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
251
|
+
- **Question:** What should happen when required checks can only run after Main traffic is switched?
|
|
252
|
+
- **Answer:** Main promotion enters `main-verifying`, preferably after isolated slot/preview verification, and becomes `main-certified` only after required Main smoke, build-identity, critical route/form, header, and health evidence passes. Any required `fail`, `stale`, or `incomplete` invalidates the promotion and automatically rolls traffic back to the last immutable `main-certified` artifact. The restored version receives its own health verification and incident evidence. Missing prior certified artifacts or failed rollback produces a critical incident and must never be reported as successful publication.
|
|
253
|
+
|
|
254
|
+
### K-0020: Provenance and tamper evidence for certification records
|
|
255
|
+
|
|
256
|
+
```knowledge-entry
|
|
257
|
+
id: K-0020
|
|
258
|
+
layer: L0
|
|
259
|
+
created: 2026-08-14
|
|
260
|
+
status: active
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
264
|
+
- **Question:** What provenance and integrity guarantees must every certification evidence record provide?
|
|
265
|
+
- **Answer:** The engine defines one `EvidenceEnvelope@1` containing requirement/candidate/environment identity, registered producer identity plus version/source hash, run and timestamp data, normalized input hashes, status, diagnostics, payload/artifact hashes, and redaction metadata. Producers submit results through the engine rather than writing dossiers directly. Evidence is content-addressed, appended through a hash-chained manifest, and every gate decision records the evidence IDs and resulting dossier-root hash. Remote producers use registered workload-identity attestations; local results receive an engine attestation bound to command and module hash. Manual files, unknown producers, broken signatures/chains, or unsafe secret-bearing payloads cannot certify a gate.
|
|
266
|
+
|
|
267
|
+
### K-0021: Location-independent dossier identity with durable replication
|
|
268
|
+
|
|
269
|
+
```knowledge-entry
|
|
270
|
+
id: K-0021
|
|
271
|
+
layer: L0
|
|
272
|
+
created: 2026-08-14
|
|
273
|
+
status: active
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
277
|
+
- **Question:** Where is the authoritative certification dossier stored, and what durability is required before promotion?
|
|
278
|
+
- **Answer:** The logical dossier is identified by its root hash rather than by a filesystem path or bucket. Authoring and Dev use a local content-addressed cache; before Alt the complete dossier must be replicated through a provider-neutral adapter to a durable object store (R2 may be the current adapter). Uploads require read-after-write size/digest verification and immutable digest keys. Alt/Main require a verified durable replica, while release state stores the root hash and safe locators only. Local loss is recoverable from durable storage; missing or unavailable durable evidence produces `incomplete`.
|
|
279
|
+
|
|
280
|
+
### K-0022: Retention tiers for certification evidence
|
|
281
|
+
|
|
282
|
+
```knowledge-entry
|
|
283
|
+
id: K-0022
|
|
284
|
+
layer: L0
|
|
285
|
+
created: 2026-08-14
|
|
286
|
+
status: active
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, release certification module
|
|
290
|
+
- **Question:** How long must certification records and heavy evidence artifacts be retained?
|
|
291
|
+
- **Answer:** Compact audit records—candidate identity, profile, decisions, metadata/digests, diagnostic summaries, incidents, and rollback chain—are retained indefinitely. Full `main-certified` dossiers remain while active or rollback-eligible plus 24 months after supersession; unsuccessful-candidate evidence remains 180 days. Heavy screenshots/video/traces/full logs remain 12 months for certified releases and 90 days for unsuccessful runs. Current releases, rollback targets, open incidents, and audit holds are exempt from garbage collection. Payload deletion appends a hash-chained tombstone with digest, reason, policy version, and timestamp.
|
|
292
|
+
|
|
293
|
+
### K-0023: Clean single-site republish instead of legacy migration
|
|
294
|
+
|
|
295
|
+
```knowledge-entry
|
|
296
|
+
id: K-0023
|
|
297
|
+
layer: L0
|
|
298
|
+
created: 2026-08-14
|
|
299
|
+
status: active
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, certification rollout
|
|
303
|
+
- **Question:** How should the existing production estate migrate when this workshop operates only one site and can republish it?
|
|
304
|
+
- **Answer:** Use a clean republish rather than generic legacy infrastructure. Keep the current site serving during rollout without labeling it certified; do not import old evidence or add bootstrap/legacy commands. Create a fresh candidate from current source, run the complete Dev → Alt → Main certification chain, and switch atomically or through an isolated slot. Remove the transition mode after the first `main-certified` release. Activate the new gate and remove the old grace behavior only after all required producers, evaluator agents, and durable storage are operational.
|
|
305
|
+
|
|
306
|
+
### K-0024: Post-cutover removal of bulky legacy operational artifacts
|
|
307
|
+
|
|
308
|
+
```knowledge-entry
|
|
309
|
+
id: K-0024
|
|
310
|
+
layer: L0
|
|
311
|
+
created: 2026-08-14
|
|
312
|
+
status: active
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, single-site cleanup
|
|
316
|
+
- **Question:** May old release and archived-mission data be removed to simplify the clean cutover?
|
|
317
|
+
- **Answer:** Yes, through a separate post-cutover cleanup RFC after the active mission is archived and the first new release is `main-certified`. Preserve compact immutable audit history—IDs, states, commit hashes, relationships, digests, Bordbuch, git history, normative documents, transcripts, manifests, and material incident/validation/close reports—while removing obsolete workpieces, heavy evidence/snapshots, staging directories, and old release payloads. Cleanup must use a dedicated idempotent command with dry-run, exact allow-list, mirror/source verification, tombstones, and a final report; never manual recursive deletion.
|
|
318
|
+
|
|
319
|
+
### K-0025: Automatic idempotent certification orchestration in deploy transitions
|
|
320
|
+
|
|
321
|
+
```knowledge-entry
|
|
322
|
+
id: K-0025
|
|
323
|
+
layer: L0
|
|
324
|
+
created: 2026-08-14
|
|
325
|
+
status: active
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, certification operator UX
|
|
329
|
+
- **Question:** Should agents run certification manually before deployment, or should deployment transitions orchestrate it automatically?
|
|
330
|
+
- **Answer:** Deployment transitions automatically invoke their certification gate through one goal-oriented `release.certify --release=<id> --gate=<dev-deploy|propagate-alt|promote-main>` entrypoint. The run executes only missing/stale producers, accepts evidence, evaluates the decision, syncs the dossier, is idempotent and resumable, and uses one release+gate lock. Explicit `release.certify` remains available for early checks, while deployment always re-verifies the current decision and dossier hash. Read-only status, integrity verification, and profile validation commands provide inspection; no deploy bypass flags exist.
|
|
331
|
+
|
|
332
|
+
### K-0026: Read-only certification with agent-ready remediation packs
|
|
333
|
+
|
|
334
|
+
```knowledge-entry
|
|
335
|
+
id: K-0026
|
|
336
|
+
layer: L0
|
|
337
|
+
created: 2026-08-14
|
|
338
|
+
status: active
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, certification remediation UX
|
|
342
|
+
- **Question:** May certification mutate the candidate to repair failures, and what output must a non-pass result provide?
|
|
343
|
+
- **Answer:** Certification is read-only with respect to source, content, and build artifacts and writes only dossier, telemetry, and reports. Every non-pass produces canonical `CertificationActionPack@1` tasks classified as product fix, infrastructure retry, or policy defect. Tasks contain stable requirement/dimension/gate identity, priority and dependencies, blocking rationale, precise evidence and file/URL/DOM/screenshot anchors, bounded repair instructions, and exact verification commands; JSON is canonical and Markdown/HTML are projections. Product fixes create a new candidate and dossier, infrastructure retries may resume the same candidate, and policy defects require a separate normative profile/producer change.
|
|
344
|
+
|
|
345
|
+
### K-0027: Risk-based routing for independent evaluator agents
|
|
346
|
+
|
|
347
|
+
```knowledge-entry
|
|
348
|
+
id: K-0027
|
|
349
|
+
layer: L0
|
|
350
|
+
created: 2026-08-14
|
|
351
|
+
status: active
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, qualitative certification
|
|
355
|
+
- **Question:** Which releases require one evaluator versus two, and how is evaluator disagreement handled?
|
|
356
|
+
- **Answer:** Ordinary changes require one isolated evaluator. Critical changes require two isolated evaluator runs with distinct evaluator identities and, where possible, different model families/providers; critical includes the first certified cutover and changes to business identity/offerings/prices/claims, legal/privacy/data collection, auth/payments/forms/integrations, locales, site-wide navigation/layout/CTA, public agent/action surfaces, security headers, or DNS. Borderline confidence/threshold/ambiguity or high-severity advisory outcomes automatically trigger a second evaluator. Evaluators cannot see each other's outputs. Two passes yield pass, two failures yield fail, and disagreement, missing evaluation, or insufficient independence yields `incomplete`. Risk rules and thresholds live in the versioned profile.
|
|
357
|
+
|
|
358
|
+
### K-0028: Continuous certification health after Main publication
|
|
359
|
+
|
|
360
|
+
```knowledge-entry
|
|
361
|
+
id: K-0028
|
|
362
|
+
layer: L0
|
|
363
|
+
created: 2026-08-14
|
|
364
|
+
status: active
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, continuous certification
|
|
368
|
+
- **Question:** Does `main-certified` remain valid forever, or must environment-sensitive evidence be refreshed after publication?
|
|
369
|
+
- **Answer:** Historical `main-certified` decisions remain immutable while a separate current `certificationHealth` state is maintained as `current`, `degraded`, or `revoked`. Environment-independent evidence remains valid until candidate/profile identity changes; DNS, external integrations, runtime, security headers, performance, and freshness use profile-defined TTLs and schedules. Monitoring appends evidence and health decisions. Non-critical non-pass outcomes degrade health, open incident/action packs, retry, and block new promotions; critical regressions revoke health. Each requirement declares `retry`, `incident-only`, or `rollback`, and rollback is forbidden when it cannot remedy a shared external outage. Passing refreshes restore `current` without erasing history.
|
|
370
|
+
|
|
371
|
+
### K-0029: Explicit immutable Main verification decision after traffic switch
|
|
372
|
+
|
|
373
|
+
```knowledge-entry
|
|
374
|
+
id: K-0029
|
|
375
|
+
layer: L0
|
|
376
|
+
created: 2026-08-14
|
|
377
|
+
status: active
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
381
|
+
- **Question:** How is the post-switch proof between a pre-switch `promote-main: pass` gate decision and the final `main-certified` state represented without overloading either the gate decision or mutable current health?
|
|
382
|
+
- **Answer:** Add an immutable `MainVerificationDecisionV1` dossier event. It binds the candidate, pre-switch promotion decision and dossier root, deployment operation and target slot, exact Main evidence IDs, status, rollback decision/result, and before/after dossier roots. `main-certified` is allowed only when this decision is `pass` and its resulting dossier root has a verified durable replica. Continuous health begins afterward and never substitutes for Main verification.
|
|
383
|
+
|
|
384
|
+
### K-0030: One-time bootstrap rollback target for the first certified cutover
|
|
385
|
+
|
|
386
|
+
```knowledge-entry
|
|
387
|
+
id: K-0030
|
|
388
|
+
layer: L0
|
|
389
|
+
created: 2026-08-14
|
|
390
|
+
status: active
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
394
|
+
- **Question:** How can the first clean cutover be reversible when the currently serving legacy production artifact is intentionally not retroactively certified and no previous new-system `main-certified` candidate exists yet?
|
|
395
|
+
- **Answer:** CERT-009 may register one exact `bootstrap rollback target` consisting of the current provider deployment snapshot or provider-native rollback slot. The target must have verified identity, availability, restoration capability, and a rehearsal before traffic switching, but it is never labeled `main-certified` and its evidence cannot satisfy any candidate gate or future promotion. It is eligible only to undo the first certified cutover. If no recoverable target can be proved, cutover remains `incomplete`. Cleanup protects it until the new candidate has a passing Main verification decision, a verified durable dossier, one successful continuous-health window, and a committed cutover marker; all later rollbacks require prior certified candidates.
|
|
396
|
+
|
|
397
|
+
### K-0031: Separate build identity, deployment plan, and observed environment identity
|
|
398
|
+
|
|
399
|
+
```knowledge-entry
|
|
400
|
+
id: K-0031
|
|
401
|
+
layer: L0
|
|
402
|
+
created: 2026-08-14
|
|
403
|
+
status: active
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
407
|
+
- **Question:** How should environment/configuration identity be bound without turning the identical Dev, Alt, and Main artifact into three different release candidates or allowing target drift after certification?
|
|
408
|
+
- **Answer:** Candidate identity contains `buildConfigHash` for build-affecting inputs and `deploymentPlanHash` for the intended adapter, channel targets/domains, binding contract, and public runtime contract. Each environment-specific evidence envelope and deployment operation separately records the actually observed `environmentIdentityHash`. A plan/observation mismatch is `stale`. Secret values are never stored or directly hashed; environment identity uses safe provider reference/version/presence metadata or a keyed non-reversible fingerprint. Thus one immutable candidate/artifact moves through all channels while deployment topology and runtime drift remain detectable.
|
|
409
|
+
|
|
410
|
+
### K-0032: Separate Certification Authority trust boundary
|
|
411
|
+
|
|
412
|
+
```knowledge-entry
|
|
413
|
+
id: K-0032
|
|
414
|
+
layer: L0
|
|
415
|
+
created: 2026-08-14
|
|
416
|
+
status: active
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
420
|
+
- **Question:** What prevents an author agent with workspace access from fabricating evidence, rewriting a local dossier and hash chain, or using certification/deployment credentials directly while keeping the workflow agent-only?
|
|
421
|
+
- **Answer:** Introduce a separate trusted `Certification Authority` executor. Author/evaluator agents may request producer runs and submit typed results but cannot sign decisions, append the authoritative dossier, or access authority signing, durable-write, or deployment credentials. The authority independently verifies candidate/profile/evidence, aggregates, atomically appends, durably replicates, and signs the exact decision/root/operation authorization. Deployment accepts only a current signature from the registered issuer for the exact candidate/gate/root/target. Local reports without authority are explicitly non-authoritative and open no gate. The first adapter may be a CI/Worker executor, while the engine contract remains provider-neutral; authority unavailability is `incomplete`, never a bypass.
|
|
422
|
+
|
|
423
|
+
### K-0033: Immutable policy bundle for historical certification verification
|
|
424
|
+
|
|
425
|
+
```knowledge-entry
|
|
426
|
+
id: K-0033
|
|
427
|
+
layer: L0
|
|
428
|
+
created: 2026-08-14
|
|
429
|
+
status: active
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
433
|
+
- **Question:** How can an old certification decision remain independently verifiable after the installed plugin, profile, evidence schemas, rubric, producer modules, toolchain, or authority issuer registry have changed?
|
|
434
|
+
- **Answer:** Candidate creation materializes a content-addressed durable `CertificationPolicyBundleV1` containing the canonical profile/resolved requirements, evidence schemas, rubric/risk/calibration manifest, producer declarations and source hashes, engine/plugin/toolchain manifests, deployment plan, retention policy, and then-current issuer public verification material. Its root hash contributes to `candidateId`. Historical verification uses this bundle rather than current installed code. Compact policy/schema/rubric/manifests/public keys are retained indefinitely; executable producer/container artifacts may follow bounded retention because cryptographic decision verification does not require re-execution.
|
|
435
|
+
|
|
436
|
+
### K-0034: Authority-ordered evidence selection with immutable evaluation cuts
|
|
437
|
+
|
|
438
|
+
```knowledge-entry
|
|
439
|
+
id: K-0034
|
|
440
|
+
layer: L0
|
|
441
|
+
created: 2026-08-14
|
|
442
|
+
status: active
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
- **Context:** 2026-08-14 — Werkstatt quality-hardening architecture program, specification-level grilling
|
|
446
|
+
- **Question:** How is “newest compatible evidence” selected deterministically when producers run concurrently, retry, have clock skew, or return after a gate/health operation has already closed?
|
|
447
|
+
- **Answer:** Every run has `certificationOperationId`, every attempt has `producerAttemptId`, and the authority assigns each admitted evidence record a monotonic dossier `admissionSequence`. Decisions select the latest compatible record by admission sequence and freeze an `evaluationCutSequence`; producer timestamps never determine ordering. Evidence cannot be admitted into a closed operation, and late results append a late-result incident rather than shadowing evidence. New evidence requires a new immutable decision. TTL uses authority time with bounded signed producer-clock checks. Continuous monitoring also uses stable `scheduleWindowId` values so duplicate or late deliveries cannot alter another window.
|
|
448
|
+
|
|
449
|
+
### K-0035: Core owns the runtime Diagnostic schema through a forward-only cutover
|
|
450
|
+
|
|
451
|
+
```knowledge-entry
|
|
452
|
+
id: K-0035
|
|
453
|
+
layer: L0
|
|
454
|
+
created: 2026-08-14
|
|
455
|
+
status: active
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
- **Context:** 2026-08-14 — CERT-001 RFC-level grilling, canonical diagnostic dependency
|
|
459
|
+
- **Question:** Where must the strict runtime schema for `Diagnostic[]` live so the stack-agnostic certification engine can validate evidence without importing or duplicating the site plugin contract?
|
|
460
|
+
- **Answer:** Move `diagnosticSchema`, `diagnosticEvidenceSchema`, and their inferred types into the Werkstatt engine schema layer; kernel types and the site plugin import/re-export the engine-owned contract. The migration is a forward-only clean cut: no duplicate implementation, deprecated compatibility aliases, dual-read/dual-write, or temporary success fallback. The operator accepts that the wider project may remain operationally unavailable while the full certification transition is implemented, provided every landed core contract is internally complete, type-safe, and tested.
|
|
461
|
+
|
|
462
|
+
### K-0036: Separate artifact, deployment-operation, and certification state machines
|
|
463
|
+
|
|
464
|
+
```knowledge-entry
|
|
465
|
+
id: K-0036
|
|
466
|
+
layer: L0
|
|
467
|
+
created: 2026-08-14
|
|
468
|
+
status: active
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
- **Context:** 2026-08-14 — CERT-001 RFC-level grilling, conflicting release-state vocabularies
|
|
472
|
+
- **Question:** How should CERT-001 reconcile the incompatible `published/promoted`, `ready/main-deployed`, and command-written state vocabularies without continuing to conflate artifact readiness, deployment history, and production health?
|
|
473
|
+
- **Answer:** Replace the single overloaded release state with three contracts: `ReleaseArtifactState = prepared | ready`; append-only per-channel `DeploymentOperationState = planned | authorized | deploying | deployed | verifying | succeeded | failed | rollback-authorized | rolling-back | rolled-back`; and certification represented by immutable gate/Main decisions plus separate current health. Remove legacy deployment labels from release manifest without aliases or translation. Until CERT-007 wires the new deployment workflow, any old command that cannot operate truthfully against the new model fails closed with an explicit transition diagnostic rather than using legacy semantics.
|
|
474
|
+
|
|
475
|
+
### K-0037: Certification starts from a clean namespace and strict canonicalization
|
|
476
|
+
|
|
477
|
+
```knowledge-entry
|
|
478
|
+
id: K-0037
|
|
479
|
+
layer: L0
|
|
480
|
+
created: 2026-08-14
|
|
481
|
+
status: active
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
- **Context:** 2026-08-14 — CERT-001 RFC-level grilling, identity canonicalization and legacy evidence
|
|
485
|
+
- **Question:** Must the new certification identity preserve or migrate any prior readiness/certification evidence, and should it reuse the permissive general-purpose stable JSON hash contract?
|
|
486
|
+
- **Answer:** No prior readiness report, test-evidence file, quality score, or release-state claim is imported or treated as authoritative certification. The new `@1` certification namespace starts clean, with no legacy readers, aliases, dual-write, or evidence migration; old material is non-authoritative history until post-cutover cleanup. Certification uses new strict `canonicalJsonBytesV1`/`canonicalJsonHashV1` APIs that reject non-JSON and ambiguous values and record `werkstatt/canonical-json@1`. Existing `stableJsonHash` behavior remains unchanged only for unrelated cache/platform consumers, preventing accidental global hash churn.
|
|
487
|
+
|
|
488
|
+
### K-0038: Decompose CERT-001 into one-session implementation RFCs
|
|
489
|
+
|
|
490
|
+
```knowledge-entry
|
|
491
|
+
id: K-0038
|
|
492
|
+
layer: L0
|
|
493
|
+
created: 2026-08-14
|
|
494
|
+
status: active
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
- **Context:** 2026-08-14 — RFC-0848 enhancement after semantic audit, implementation by less capable agents
|
|
498
|
+
- **Question:** Should CERT-001 remain one large implementation RFC, or be decomposed so each document can be implemented safely by a separate agent session?
|
|
499
|
+
- **Answer:** Keep RFC-0848 as the integration contract for CERT-001 and split implementation into three dependent RFCs: strict runtime contracts/Diagnostic ownership/canonical JSON/identity; deterministic evidence selection/aggregation/dossier/action packs; and release/deployment state replacement with the fail-closed legacy command boundary. Each child RFC must compile and pass its own tests independently. RFC-0848 completes only after all three children are implemented and its cross-module integration checks pass.
|
|
500
|
+
|
|
501
|
+
### K-0039: Supersede legacy release and deployment authority without rebuilding infrastructure
|
|
502
|
+
|
|
503
|
+
```knowledge-entry
|
|
504
|
+
id: K-0039
|
|
505
|
+
layer: L0
|
|
506
|
+
created: 2026-08-14
|
|
507
|
+
status: active
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
- **Context:** 2026-08-14 — RFC-0848 enhancement after semantic audit, clean certification reset
|
|
511
|
+
- **Question:** Which prior RFCs lose normative authority immediately, and which existing mechanisms remain reusable without being allowed to certify publication?
|
|
512
|
+
- **Answer:** RFC-0848 fully supersedes RFC-0357, RFC-0358, RFC-0608, RFC-0627, RFC-0628, and RFC-0842 because their release/deployment authority and state machines conflict with the new artifact/operation/certification separation. Diagnostic, consistency locks, fingerprinting, artifact storage, deploy adapters, freshness primitives, evidence archives, the testing pyramid, validators, and release-ready reliability remain reusable infrastructure, but none may independently authorize a deployment. Later CERT RFCs explicitly reconnect or supersede their affected authority behavior.
|
|
513
|
+
|
|
514
|
+
### K-0040: Bound deterministic certification workloads explicitly
|
|
515
|
+
|
|
516
|
+
```knowledge-entry
|
|
517
|
+
id: K-0040
|
|
518
|
+
layer: L0
|
|
519
|
+
created: 2026-08-14
|
|
520
|
+
status: active
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
- **Context:** 2026-08-14 — RFC-0848 enhancement after semantic audit, certification performance contract
|
|
524
|
+
- **Question:** Which hard input limits and algorithmic bounds must prevent a weak implementation from introducing unbounded or quadratic certification evaluation?
|
|
525
|
+
- **Answer:** A certification profile contains at most 1,000 requirements, one evaluation cut admits at most 10,000 evidence records, one action pack contains at most 1,000 tasks, and canonical JSON input is at most 8 MiB with depth at most 64. Evidence selection and aggregation must run in `O(E + R log R)` time and `O(E + R)` memory; a per-requirement full evidence scan is forbidden. Tests include a deterministic 1,000-requirement/10,000-evidence stress fixture. Limit overflow emits an explicit `incomplete` or contract diagnostic without truncation. Timing benchmarks remain advisory rather than flaky CI gates.
|
|
526
|
+
|
|
527
|
+
### K-0041: Split canonicalization, Diagnostic ownership, and certification contracts
|
|
528
|
+
|
|
529
|
+
```knowledge-entry
|
|
530
|
+
id: K-0041
|
|
531
|
+
layer: L0
|
|
532
|
+
created: 2026-08-14
|
|
533
|
+
status: active
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement after semantic audit, execution boundaries for less capable agents
|
|
537
|
+
- **Question:** Should RFC-0849 continue to combine canonical JSON, Diagnostic ownership, and all certification schemas/identities?
|
|
538
|
+
- **Answer:** No. RFC-0849 owns only bounded canonical JSON; RFC-0852 owns the forward-only engine Diagnostic cutover; RFC-0853 owns strict certification schemas and explicit identity builders. RFC-0850 and RFC-0851 depend on RFC-0853, and RFC-0848 remains the final integration boundary.
|
|
539
|
+
|
|
540
|
+
### K-0042: Canonical identity uses an engine-created immutable snapshot
|
|
541
|
+
|
|
542
|
+
```knowledge-entry
|
|
543
|
+
id: K-0042
|
|
544
|
+
layer: L0
|
|
545
|
+
created: 2026-08-14
|
|
546
|
+
status: active
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, hostile JavaScript input boundary
|
|
550
|
+
- **Question:** What exact value may the canonical byte/hash functions accept when arbitrary objects and Proxy traps cannot be proven stable?
|
|
551
|
+
- **Answer:** Only an opaque `CanonicalJsonValueV1` produced by an engine-owned snapshot builder. The builder traverses once, copies permitted data into detached structures, deep-freezes it, and registers an internal non-exported brand. External/file/network values first pass a strict schema and snapshot creation. Proxy trap failures become typed failures; the contract does not claim that JavaScript can identify every Proxy.
|
|
552
|
+
|
|
553
|
+
### K-0043: Reject lone UTF-16 surrogates before canonicalization
|
|
554
|
+
|
|
555
|
+
```knowledge-entry
|
|
556
|
+
id: K-0043
|
|
557
|
+
layer: L0
|
|
558
|
+
created: 2026-08-14
|
|
559
|
+
status: active
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, Unicode collision safety
|
|
563
|
+
- **Question:** How should canonical JSON handle unpaired UTF-16 surrogate code units?
|
|
564
|
+
- **Answer:** Reject them in every string and object key with `CERT-CANONICAL-UNICODE-01`. Valid Unicode is preserved without NFC/NFKC normalization. Collision and boundary fixtures prove distinct JavaScript strings cannot silently collapse through UTF-8 replacement behavior.
|
|
565
|
+
|
|
566
|
+
### K-0044: Persisted diagnostics are canonical and redacted by construction
|
|
567
|
+
|
|
568
|
+
```knowledge-entry
|
|
569
|
+
id: K-0044
|
|
570
|
+
layer: L0
|
|
571
|
+
created: 2026-08-14
|
|
572
|
+
status: active
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, Diagnostic identity and privacy boundary
|
|
576
|
+
- **Question:** Which Diagnostic fields participate in evidence identity, and how can every valid Diagnostic also be safely persisted and hashed?
|
|
577
|
+
- **Answer:** The complete strict Diagnostic participates in evidence identity. Remove legacy `id`, `blockId`, and `suggestion`; replace arbitrary `data` with bounded `CanonicalJsonObjectV1`; bound all strings, collections, and total encoded size; require safe relative paths and pre-redacted URLs/snippets/messages/fix hints/data; reject credentials, absolute paths, and unresolved secret/PII exposure.
|
|
578
|
+
|
|
579
|
+
### K-0045: Separate recoverable snapshot failures from total byte/hash operations
|
|
580
|
+
|
|
581
|
+
```knowledge-entry
|
|
582
|
+
id: K-0045
|
|
583
|
+
layer: L0
|
|
584
|
+
created: 2026-08-14
|
|
585
|
+
status: active
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, throw-versus-return contract
|
|
589
|
+
- **Question:** Where do canonicalization failures occur, and may canonical byte/hash entrypoints throw?
|
|
590
|
+
- **Answer:** `snapshotCanonicalJsonV1(unknown)` returns a discriminated typed result for domain, Unicode, traversal, and limit failures. `canonicalJsonBytesV1` and `canonicalJsonHashV1` are total and non-throwing over a valid branded snapshot. Explicit Zod `.parse()` may throw by its ordinary contract; recoverable public boundaries use `safeParse` or typed results.
|
|
591
|
+
|
|
592
|
+
### K-0046: Bound canonical JSON traversal as well as encoded output
|
|
593
|
+
|
|
594
|
+
```knowledge-entry
|
|
595
|
+
id: K-0046
|
|
596
|
+
layer: L0
|
|
597
|
+
created: 2026-08-14
|
|
598
|
+
status: active
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, canonicalization denial-of-service limits
|
|
602
|
+
- **Question:** Which structural limits supplement the existing 8 MiB/depth-64 output contract?
|
|
603
|
+
- **Answer:** Limit one document to 250,000 nodes, 10,000 keys per object, 100,000 items per array, 1 MiB UTF-8 bytes per string, 1 KiB UTF-8 bytes per key, depth 64, and 8 MiB canonical bytes. Enforce limits during snapshot traversal, never truncate, return `CERT-CANONICAL-LIMIT-01`, and account for byte, node, sorted-key, and depth memory explicitly.
|
|
604
|
+
|
|
605
|
+
### K-0047: Canonical identities require a closed snapshot boundary
|
|
606
|
+
|
|
607
|
+
```knowledge-entry
|
|
608
|
+
id: K-0047
|
|
609
|
+
layer: L0
|
|
610
|
+
created: 2026-08-14
|
|
611
|
+
status: active
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement grilling meta-analysis
|
|
615
|
+
- **Question:** Should the repeated canonicalization decisions be promoted to a reusable active L2 principle?
|
|
616
|
+
- **Answer:** Yes. Permanent identities must canonicalize only detached, bounded, immutable, branded snapshots; ambiguous Unicode, unstable traversal, and limit overflow are rejected before hashing, and byte/hash operations over accepted snapshots are deterministic and total.
|
|
617
|
+
|
|
618
|
+
### K-0048: Canonical JSON exposes only an object-root authority API
|
|
619
|
+
|
|
620
|
+
```knowledge-entry
|
|
621
|
+
id: K-0048
|
|
622
|
+
layer: L0
|
|
623
|
+
created: 2026-08-14
|
|
624
|
+
status: active
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement after the bounded canonical JSON audit
|
|
628
|
+
- **Question:** Should canonical-json@1 support scalar and array roots through an opaque wrapper, or expose only the object-root shape used by certification identities and Diagnostic data?
|
|
629
|
+
- **Answer:** Expose only an engine-created, runtime-branded `CanonicalJsonObjectV1` root. Nested values may use the complete accepted JSON subset, including scalars and arrays. Do not add a wrapper/unwrapping API for root shapes with no current authority consumer.
|
|
630
|
+
|
|
631
|
+
### K-0049: Canonical JSON uses a strict RFC 8785 profile
|
|
632
|
+
|
|
633
|
+
```knowledge-entry
|
|
634
|
+
id: K-0049
|
|
635
|
+
layer: L0
|
|
636
|
+
created: 2026-08-14
|
|
637
|
+
status: active
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement after the bounded canonical JSON audit
|
|
641
|
+
- **Question:** Should canonical-json@1 invent and freeze its own number/string/key algorithm or use RFC 8785 JCS as its normative byte foundation?
|
|
642
|
+
- **Answer:** Use RFC 8785 JCS as the normative byte foundation and freeze its official number vectors. Add stricter Werkstatt domain constraints: an object-only root, negative-zero and unsafe-integer rejection, hard resource limits, and detached runtime branding.
|
|
643
|
+
|
|
644
|
+
### K-0050: Canonical failure paths never expose object keys
|
|
645
|
+
|
|
646
|
+
```knowledge-entry
|
|
647
|
+
id: K-0050
|
|
648
|
+
layer: L0
|
|
649
|
+
created: 2026-08-14
|
|
650
|
+
status: active
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement after the bounded canonical JSON audit
|
|
654
|
+
- **Question:** How should canonical failures locate an invalid nested value without leaking a secret or personal value used as an object key?
|
|
655
|
+
- **Answer:** Never include raw object keys in a failure. Use array indices and deterministic object-key ordinals after JCS sorting, plus an explicit omitted-segment count for a bounded tail. Messages also omit rejected values and source keys.
|
|
656
|
+
|
|
657
|
+
### K-0051: Werkstatt targets Node 24 without a Node 22 compatibility matrix
|
|
658
|
+
|
|
659
|
+
```knowledge-entry
|
|
660
|
+
id: K-0051
|
|
661
|
+
layer: L0
|
|
662
|
+
created: 2026-08-14
|
|
663
|
+
status: active
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement, runtime reproducibility boundary
|
|
667
|
+
- **Question:** Should canonical vectors be verified on both Node 22 and Node 24 because the root package currently declares Node >=22?
|
|
668
|
+
- **Answer:** No. Move the ecosystem fully to Node 24 and retain no Node 22 compatibility contract. Canonical reproducibility is proved on the single supported Node 24 line against independent frozen RFC 8785 vectors; future runtime changes require explicit validation and migration.
|
|
669
|
+
|
|
670
|
+
### K-0052: Canonical JSON rejects unsafe integer values
|
|
671
|
+
|
|
672
|
+
```knowledge-entry
|
|
673
|
+
id: K-0052
|
|
674
|
+
layer: L0
|
|
675
|
+
created: 2026-08-14
|
|
676
|
+
status: active
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement after selecting RFC 8785 JCS
|
|
680
|
+
- **Question:** May canonical-json@1 accept integral IEEE-754 values outside JavaScript's safe integer range merely because JCS can serialize their resulting double deterministically?
|
|
681
|
+
- **Answer:** No. Reject every integral number for which `Number.isSafeInteger(value)` is false. Exact large integers, money, and decimal quantities use schema-declared strings; finite non-integral numbers remain allowed under RFC 8785 serialization.
|
|
682
|
+
|
|
683
|
+
### K-0053: Permanent formats profile standards instead of imitating them
|
|
684
|
+
|
|
685
|
+
```knowledge-entry
|
|
686
|
+
id: K-0053
|
|
687
|
+
layer: L0
|
|
688
|
+
created: 2026-08-14
|
|
689
|
+
status: active
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
- **Context:** 2026-08-14 — RFC-0849 enhancement grilling meta-analysis
|
|
693
|
+
- **Question:** Should the repeated decision to base permanent canonical bytes on a named external standard plus stricter local constraints become an active reusable L2 principle?
|
|
694
|
+
- **Answer:** Yes. Pin the exact standard and independent vectors, state local restrictions as an explicit narrower profile, and avoid maintaining an unnamed almost-equivalent permanent algorithm.
|
|
695
|
+
|
|
696
|
+
### K-0054: Agent-run Node 24 bootstrap before repository cutover
|
|
697
|
+
|
|
698
|
+
```knowledge-entry
|
|
699
|
+
id: K-0054
|
|
700
|
+
layer: L0
|
|
701
|
+
created: 2026-08-14
|
|
702
|
+
status: active
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
- **Context:** 2026-08-14 — RFC-0854 enhancement after the Node 24 ecosystem audit
|
|
706
|
+
- **Question:** May the implementing agent install and activate Node 24 on the Ubuntu host before changing repository engine enforcement, even though Werkstatt itself must not auto-download or fall back to another runtime?
|
|
707
|
+
- **Answer:** Yes. Runtime provisioning is an explicit step-zero environment bootstrap performed by the implementing agent before any repository mutation, not product fallback behavior. The agent re-verifies Node and pnpm under Node 24; if provisioning or verification fails, it stops without changing repository files.
|
|
708
|
+
|
|
709
|
+
### K-0055: Forge uses a real major boundary for the Node 24-only contract
|
|
710
|
+
|
|
711
|
+
```knowledge-entry
|
|
712
|
+
id: K-0055
|
|
713
|
+
layer: L0
|
|
714
|
+
created: 2026-08-14
|
|
715
|
+
status: active
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
- **Context:** 2026-08-14 — RFC-0854 enhancement after the Node 24 ecosystem audit
|
|
719
|
+
- **Question:** Which independent Forge version represents removal of Node 20/22 support, and how is it separated from publication?
|
|
720
|
+
- **Answer:** Bump `@warpgogol/forge` from `0.28.0` to `1.0.0`, set `forge.syncedVersion` to the same value, and require a standalone Node 24 tarball smoke test. Implementation records the version but does not publish; npm publication remains a separate explicit operator command.
|
|
721
|
+
|
|
722
|
+
### K-0056: Stage the single-site Node 24 republish through Alt
|
|
723
|
+
|
|
724
|
+
```knowledge-entry
|
|
725
|
+
id: K-0056
|
|
726
|
+
layer: L0
|
|
727
|
+
created: 2026-08-14
|
|
728
|
+
status: active
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
- **Context:** 2026-08-14 — RFC-0854 enhancement, current Sternsystem cutover
|
|
732
|
+
- **Question:** May the replaceable single site republish directly to Main, or must it prove the Node 24 build/deploy path through Alt first?
|
|
733
|
+
- **Answer:** Require `Alt deploy → Alt smoke pass → Main deploy → Main smoke pass`. Any non-pass stops the transition and blocks RFC completion; the single-site topology does not justify bypassing the available staging proof.
|