@hellraisercenobit/ai-engineering-gate 0.8.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.
Files changed (100) hide show
  1. package/README.md +82 -0
  2. package/agents/design-pattern-reviewer.md +40 -0
  3. package/agents/modern-typescript-reviewer.md +24 -0
  4. package/agents/testing-pattern-reviewer.md +23 -0
  5. package/bin/ai-engineering-gate.mjs +6 -0
  6. package/contracts/axi/axi-standard.md +273 -0
  7. package/contracts/axi/pin.json +36 -0
  8. package/contracts/members.json +58 -0
  9. package/contracts/schemas/arbitration.schema.json +45 -0
  10. package/contracts/schemas/decision-envelope.schema.json +215 -0
  11. package/contracts/schemas/declaration.schema.json +190 -0
  12. package/contracts/schemas/dispute.schema.json +67 -0
  13. package/contracts/schemas/evidence-append.schema.json +72 -0
  14. package/contracts/schemas/gate-output.schema.json +296 -0
  15. package/contracts/schemas/marker.schema.json +75 -0
  16. package/contracts/schemas/review-envelope.schema.json +378 -0
  17. package/contracts/schemas/verdict-record.schema.json +191 -0
  18. package/contracts/suite-contract.md +270 -0
  19. package/dist/ai-engineering-gate.mjs +2762 -0
  20. package/package.json +47 -0
  21. package/skills/engineering/review-design-patterns/LICENSE +6 -0
  22. package/skills/engineering/review-design-patterns/SKILL.md +196 -0
  23. package/skills/engineering/review-design-patterns/agents/openai.yaml +3 -0
  24. package/skills/engineering/review-design-patterns/references/smell-signatures.md +117 -0
  25. package/skills/engineering/review-design-patterns/review-design-patterns.yaml +25 -0
  26. package/skills/engineering/review-modern-typescript/LICENSE +21 -0
  27. package/skills/engineering/review-modern-typescript/SKILL.md +88 -0
  28. package/skills/engineering/review-modern-typescript/agents/openai.yaml +3 -0
  29. package/skills/engineering/review-modern-typescript/references/smell-signatures.md +36 -0
  30. package/skills/engineering/review-modern-typescript/review-modern-typescript.yaml +22 -0
  31. package/skills/engineering/review-testing-patterns/SKILL.md +108 -0
  32. package/skills/engineering/review-testing-patterns/agents/openai.yaml +4 -0
  33. package/skills/engineering/review-testing-patterns/references/compiler-profile.mjs +103 -0
  34. package/skills/engineering/review-testing-patterns/references/smell-signatures.md +30 -0
  35. package/skills/engineering/review-testing-patterns/review-testing-patterns.yaml +23 -0
  36. package/skills/engineering/transpose-design-patterns/LICENSE +6 -0
  37. package/skills/engineering/transpose-design-patterns/SKILL.md +231 -0
  38. package/skills/engineering/transpose-design-patterns/agents/openai.yaml +3 -0
  39. package/skills/engineering/transpose-design-patterns/references/arbitration.schema.json +45 -0
  40. package/skills/engineering/transpose-design-patterns/references/decision-envelope.schema.json +215 -0
  41. package/skills/engineering/transpose-design-patterns/references/declaration.schema.json +190 -0
  42. package/skills/engineering/transpose-design-patterns/references/design-decision-record.schema.json +731 -0
  43. package/skills/engineering/transpose-design-patterns/references/dispute.schema.json +67 -0
  44. package/skills/engineering/transpose-design-patterns/references/evidence-append.schema.json +72 -0
  45. package/skills/engineering/transpose-design-patterns/references/marker.schema.json +75 -0
  46. package/skills/engineering/transpose-design-patterns/references/pattern-catalog.md +305 -0
  47. package/skills/engineering/transpose-design-patterns/references/record.example.json +120 -0
  48. package/skills/engineering/transpose-design-patterns/references/review-envelope.schema.json +378 -0
  49. package/skills/engineering/transpose-design-patterns/references/suite-contract.md +270 -0
  50. package/skills/engineering/transpose-design-patterns/references/transpose-angular.md +224 -0
  51. package/skills/engineering/transpose-design-patterns/references/transpose-php.md +561 -0
  52. package/skills/engineering/transpose-design-patterns/references/transpose-quarkus.md +283 -0
  53. package/skills/engineering/transpose-design-patterns/references/transpose-react.md +256 -0
  54. package/skills/engineering/transpose-design-patterns/references/transpose-vanilla.md +204 -0
  55. package/skills/engineering/transpose-design-patterns/references/transpose-vue.md +234 -0
  56. package/skills/engineering/transpose-design-patterns/transpose-design-patterns.yaml +24 -0
  57. package/skills/engineering/transpose-modern-typescript/LICENSE +21 -0
  58. package/skills/engineering/transpose-modern-typescript/SKILL.md +90 -0
  59. package/skills/engineering/transpose-modern-typescript/agents/openai.yaml +3 -0
  60. package/skills/engineering/transpose-modern-typescript/references/arbitration.schema.json +45 -0
  61. package/skills/engineering/transpose-modern-typescript/references/catalog.md +38 -0
  62. package/skills/engineering/transpose-modern-typescript/references/collections.md +50 -0
  63. package/skills/engineering/transpose-modern-typescript/references/compatibility.md +61 -0
  64. package/skills/engineering/transpose-modern-typescript/references/decision-envelope.schema.json +215 -0
  65. package/skills/engineering/transpose-modern-typescript/references/decision-record.schema.json +830 -0
  66. package/skills/engineering/transpose-modern-typescript/references/declaration.schema.json +190 -0
  67. package/skills/engineering/transpose-modern-typescript/references/dispute.schema.json +67 -0
  68. package/skills/engineering/transpose-modern-typescript/references/evidence-append.schema.json +72 -0
  69. package/skills/engineering/transpose-modern-typescript/references/idioms.md +74 -0
  70. package/skills/engineering/transpose-modern-typescript/references/marker.schema.json +75 -0
  71. package/skills/engineering/transpose-modern-typescript/references/platform.md +147 -0
  72. package/skills/engineering/transpose-modern-typescript/references/record.example.json +172 -0
  73. package/skills/engineering/transpose-modern-typescript/references/record.md +37 -0
  74. package/skills/engineering/transpose-modern-typescript/references/review-envelope.schema.json +378 -0
  75. package/skills/engineering/transpose-modern-typescript/references/suite-contract.md +270 -0
  76. package/skills/engineering/transpose-modern-typescript/references/types.md +97 -0
  77. package/skills/engineering/transpose-modern-typescript/transpose-modern-typescript.yaml +22 -0
  78. package/skills/engineering/transpose-testing-patterns/SKILL.md +96 -0
  79. package/skills/engineering/transpose-testing-patterns/agents/openai.yaml +4 -0
  80. package/skills/engineering/transpose-testing-patterns/references/arbitration.schema.json +45 -0
  81. package/skills/engineering/transpose-testing-patterns/references/catalog.md +218 -0
  82. package/skills/engineering/transpose-testing-patterns/references/decision-envelope.schema.json +215 -0
  83. package/skills/engineering/transpose-testing-patterns/references/decision-record.schema.json +857 -0
  84. package/skills/engineering/transpose-testing-patterns/references/declaration.schema.json +190 -0
  85. package/skills/engineering/transpose-testing-patterns/references/detect-adapter.mjs +98 -0
  86. package/skills/engineering/transpose-testing-patterns/references/dispute.schema.json +67 -0
  87. package/skills/engineering/transpose-testing-patterns/references/doubles-data.md +45 -0
  88. package/skills/engineering/transpose-testing-patterns/references/evidence-append.schema.json +72 -0
  89. package/skills/engineering/transpose-testing-patterns/references/journal-event.schema.json +115 -0
  90. package/skills/engineering/transpose-testing-patterns/references/marker.schema.json +75 -0
  91. package/skills/engineering/transpose-testing-patterns/references/record.example.json +230 -0
  92. package/skills/engineering/transpose-testing-patterns/references/record.md +25 -0
  93. package/skills/engineering/transpose-testing-patterns/references/review-envelope.schema.json +378 -0
  94. package/skills/engineering/transpose-testing-patterns/references/suite-contract.md +270 -0
  95. package/skills/engineering/transpose-testing-patterns/references/tdd.md +62 -0
  96. package/skills/engineering/transpose-testing-patterns/references/transpose-codeception.md +84 -0
  97. package/skills/engineering/transpose-testing-patterns/references/transpose-karma-jasmine-angular.md +73 -0
  98. package/skills/engineering/transpose-testing-patterns/references/transpose-vitest.md +111 -0
  99. package/skills/engineering/transpose-testing-patterns/references/typescript.md +42 -0
  100. package/skills/engineering/transpose-testing-patterns/transpose-testing-patterns.yaml +23 -0
@@ -0,0 +1,270 @@
1
+ # Transpose/review contract 1.1.0
2
+
3
+ Canonical source: `contracts/suite-contract.md` in hellraisercenobit/skills. Copies in
4
+ transpose bundles are generated by `npm run sync:contract`; never edit them by hand.
5
+ The repository maintainer owns this contract. Domain catalogs and record schemas remain
6
+ owned by their transpose skill. Read this contract once per execution.
7
+
8
+ 1.1.0 adds clauses to 1.0.0 and changes none of its guarantees. Each member declares the
9
+ contract versions it supports in the member manifest. A workflow that runs on records,
10
+ checks and independent reports without any gate stays valid under 1.1.0: the clauses below
11
+ describe what enforcement derives, never a new obligation on prose.
12
+
13
+ ## Guarantees
14
+
15
+ | ID | Requirement | Evidence |
16
+ | --- | --- | --- |
17
+ | C01 | One normative catalog per dimension, owned by transpose and read by review. | Resolved local references and identified versions or content hashes. |
18
+ | C02 | Explicit scope and comparison base. | Files and sites, including relevant uncommitted and untracked files. |
19
+ | C03 | Inventory every relevant site, including retained choices. | Domain criteria, alternatives and observable invariants. |
20
+ | C04 | Record each decision before the first affected implementation write. | Schema-valid records outside the repository; preserve previous revisions and reasons. |
21
+ | C05 | Separate deterministic checks from semantic judgment. | Schema/catalog membership and applicable type, runtime, lint and build checks. |
22
+ | C06 | Independent reviewer with a neutral brief. | Fresh context without builder history or rationale; original request and factual constraints only. |
23
+ | C07 | Freeze expectations before reading records or author justification. | Immutable expected matrix in the review transcript; no `git log`, PR rationale or author analysis. |
24
+ | C08 | Compare every site; steelman every candidate finding. | Expected/recorded/actual, exact rule, evidence, strongest defense and refutation. |
25
+ | C09 | Reviewer changes no files and delegates no review. | Report in its response; the builder fixes and dispatches a new fresh reviewer. |
26
+ | C10 | Only a current `SOUND` completes transposition. | Complete audit, zero confirmed findings, passing applicable checks and no unresolved dispute. |
27
+ | C11 | Only the reviewer attests; scope changes invalidate its verdict. | Examined state identified; the gate computes the fingerprints a verdict binds to. |
28
+ | C12 | Missing prerequisites and limits are explicit. | No invented rules, support, independence or attestation. |
29
+
30
+ ## Shared execution rules
31
+
32
+ Resolve companions, schema, catalog, this contract and any **required** guides first. Pin
33
+ their versions or hashes for the execution. A missing optional guide is acceptable only
34
+ when the domain permits catalog-only decisions. Conflicting installed contract/catalog
35
+ versions are an incomplete prerequisite; do not silently download another version.
36
+
37
+ The builder inventories scope, compares alternatives including the current implementation,
38
+ records, then writes and checks. Coherent local choices can share a record if every site
39
+ remains identifiable. `none` has the domain's explicit meaning; it is not a shortcut around
40
+ evaluation. No applicable site is a justified non-applicable dimension, not an artificial
41
+ `SOUND`. Do not add common fields to a domain schema that forbids them: coordination
42
+ metadata belongs in an external execution index.
43
+
44
+ The reviewer reads independent requirements and factual constraints, inventories the scope
45
+ and freezes a matrix of expected acceptable choices, rules and invariants **in its response
46
+ before the next tool call that opens records**. It then compares expected, recorded and
47
+ actual. Record absence is not a retrospective code defect in a standalone audit; a claimed
48
+ completed transposition requires its records. State significant exposure to author
49
+ justification. A contaminated brief requires a new reviewer before completion; do not
50
+ rewrite the frozen matrix to match the builder. Verified new facts that change premises
51
+ require a new framing and fresh review, retaining the old matrix.
52
+
53
+ For each candidate, construct the strongest defense (compatibility, public contract, domain
54
+ meaning, framework semantics, proven cost or legitimate simplicity). Drop it if that defense
55
+ holds. Confirm only with an applicable catalog rule and evidence. Report catalog gaps
56
+ separately, without severity or verdict impact. A gap is not permission to invent a rule.
57
+
58
+ Reports identify scope/base/state, reference versions, coverage, frozen matrix, comparison,
59
+ confirmed findings, defended choices, gaps and check evidence. Each finding identifies
60
+ location, rule, expected/recorded/actual, impact, defense, refutation and proposed correction.
61
+ Severity: `Blocker` for concrete correctness/support failures, `Major` for demonstrated
62
+ structural costs or missing guarantees, `Minor` for evidenced idiomatic drift after defense.
63
+ Age or taste alone is never evidence. This clause owns the severity tiers; a domain skill
64
+ references it instead of restating them.
65
+
66
+ | Verdict | Meaning |
67
+ | --- | --- |
68
+ | SOUND | Complete audit, zero confirmed findings. |
69
+ | SMELLS | Confirmed findings, no Blocker. |
70
+ | VIOLATIONS | At least one Blocker. |
71
+
72
+ An incomplete execution reports the missing prerequisite and has no attestable quality
73
+ verdict; it is not a fourth verdict. The reviewer edits neither code, records, catalogs nor
74
+ fixtures. Its report is a response that the harness can save externally. Its sole permitted
75
+ external mutations are the gate's attestation and report operations, when supported;
76
+ attestation accepts `SOUND` only. A dispute goes to the user and remains unresolved until
77
+ decided; it is not a fix.
78
+
79
+ ## Dimension registry
80
+
81
+ The member manifest `contracts/members.json` is the registry. It owns, per member: the
82
+ dimension identifier, the transpose and review skill locations, the reviewer agent, the
83
+ decision schema, the evidence schemas the dimension owns, the reference bundle, the contract
84
+ versions the member supports, and a status, `implemented` or `qualified`. Nothing else
85
+ defines a dimension identifier, and no other file lists the dimensions.
86
+
87
+ The registry holds orchestration metadata and schema locations only: never a rule, a pattern
88
+ name, an idiom or a test form. Adding a dimension is a registration plus a qualification. It
89
+ never changes enforcement logic and never adds a hook.
90
+
91
+ ## State and evidence
92
+
93
+ Store evidence, derive state. Every durable fact is a schema-valid document on disk: a
94
+ declaration, a decision record, an evidence append, an attestation, a report, a dispute or
95
+ an arbitration. No implementation persists a workflow boolean such as "reviewed" or
96
+ "fresh"; state is recomputed from those documents and from the code they cover.
97
+
98
+ A project opts in with one committed marker at its repository root, which also carries the
99
+ project's dimension selection and its evidence and export locations. Without that marker,
100
+ enforcement is silent and every workflow stays portable. Evidence lives outside the
101
+ checkout, under a task key derived from the branch.
102
+
103
+ ### Declaration
104
+
105
+ Before the first record, a task declares each registered dimension applicable or
106
+ non-applicable, with a reason, the requester's wording of the request and the factual
107
+ constraints. An applicable declaration also names its scope, as repository-relative file
108
+ paths or directory prefixes, and the relevant configuration files. A non-applicable
109
+ dimension has a declaration and nothing else: skipping a dimension is a recorded decision,
110
+ never a default, and an undeclared registered dimension is an incomplete task.
111
+
112
+ The declaration is what protects the scope and what a neutral brief is rendered from. It is
113
+ revisioned like a record, and it locks once a record, report, review window or dispute
114
+ depends on it, unless the revision only widens scope or adds constraints.
115
+
116
+ ### Fingerprints
117
+
118
+ "Current" means three fingerprints.
119
+
120
+ - **Source**: the content hashes of the union of the declared scope paths, the declared
121
+ configuration files and the change set. The change set is the tracked diff between the
122
+ merge-base of the recorded base and HEAD, plus staged, unstaged and untracked files, minus
123
+ the export directory, the gate-owned paths and the marker's ignore patterns. Content
124
+ hashes only: the base revision is recorded and not hashed, so a content-neutral rebase
125
+ does not expire a verdict, and a clean HEAD never identifies a dirty worktree. Change-set
126
+ paths outside every applicable declaration are reported as undeclared changes.
127
+ - **Reference**: the content hashes of the dimension's reference bundle as distributed —
128
+ catalog, decision schema, evidence schemas, guides, the review skill's references and the
129
+ generated copy of this contract — plus the contract version and the gate version.
130
+ - **Decision**: the ordered hash of the dimension's declaration and of every decision record
131
+ of the dimension for the task, each with its revision number.
132
+
133
+ A verdict is current only while all three fingerprints it was bound to still match. Any
134
+ mismatch is stale. Eager marking by a PostToolUse hook is an optimization and is never
135
+ authoritative: a skipped hook, a crash or an editor outside the harness must never leave a
136
+ stale verdict looking current, so expiry is always derived from the fingerprints.
137
+
138
+ ### Envelopes
139
+
140
+ Every decision record carries a common outer envelope: dimension, schema version, catalog
141
+ version, the contract versions it supports, need, scope as an array of paths, base, revision
142
+ as number, previous and reason, and two typed lists — `cites`, artifacts and evidence
143
+ sources that exist when the record is validated, and `plans`, artifacts the record commits
144
+ to produce, each with its dimension-defined role. The dimension-specific body stays owned by
145
+ the dimension schema. Applicability is not a record field; it lives in the declaration.
146
+
147
+ `cites` carries referential integrity. A cited path that does not exist refuses the record.
148
+ A claim of unknown about a checkable fact — targets, runtimes, environments, configuration —
149
+ is accepted only with the sources consulted cited, or with the paths searched and not found.
150
+ A revision that announces a correction is refused when no cited artifact changed: a record
151
+ describes what was done, not what should have been. `plans` are not checked when the record
152
+ is written, so a record that precedes the first affected write stays valid under C04; every
153
+ planned artifact must exist before a review begins, is filed or is dispatched.
154
+
155
+ Every review emits a common review envelope: dimension, the supported contract version, the
156
+ verdict, the records examined, the checks it saw executed, a reviewer object with an
157
+ independence claim and a declared identity, the confirmed findings and the
158
+ challenged-survived list. Each finding has an identifier and a kind, `evidence` or
159
+ `judgment`; an evidence finding carries a typed remedy, a judgment finding the proposed
160
+ correction C08 already requires. The envelope carries no fingerprint: a fingerprint a
161
+ builder or a reviewer writes anywhere is ignored.
162
+
163
+ ### Attestation and report
164
+
165
+ The gate writes both, and they are the reviewer's only permitted external mutations. An
166
+ attestation stores a `SOUND` envelope together with the three fingerprints of the reviewer's
167
+ window and its captured identity. A report stores a `SMELLS` or `VIOLATIONS` envelope bound
168
+ the same way; it blocks completion until a `SOUND` attestation on a later state, or an
169
+ arbitration closing its last open finding, supersedes it. No other verdict is attestable and
170
+ no verdict is a score.
171
+
172
+ ### Findings, disputes and arbitration
173
+
174
+ A finding admits two responses: address it — the remedy executed and the artifact appended,
175
+ or the record revised and the state moved — or dispute it with a pointer to existing
176
+ counter-evidence. An answer in prose is neither, and a changed fingerprint alone addresses
177
+ nothing. Findings about evidence say evidence not on file, never false claim: the builder is
178
+ asked to file, not to confess.
179
+
180
+ While any finding of the last report is pending, no new review of that dimension begins, so
181
+ the same finding is never re-litigated with a fresh reviewer. A valid dispute blocks
182
+ completion and goes to the user; it never goes to another reviewer on the same state. Its
183
+ only exit is an arbitration that only a human hand writes: `uphold` closes the finding,
184
+ `reject` puts its remedy or correction back to pending.
185
+
186
+ ### Reviewer identity
187
+
188
+ Every gate call carries the harness session identifier. A reviewer's calls carry an agent
189
+ identifier that must differ from the builder's. This checks consistency, not independence.
190
+ Where a harness provides no agent identifier, the attestation is stored unverified, the state
191
+ says so, and a pipeline may require verified identity.
192
+
193
+ ### Completion
194
+
195
+ For each registered dimension: a non-applicable declaration needs its reason; an applicable
196
+ one needs at least one validated record, every planned artifact produced, a current `SOUND`
197
+ attestation, no current report with an open finding and no unresolved dispute. An undeclared
198
+ registered dimension is incomplete. Any incomplete dimension blocks completion whatever the
199
+ others say. Requirements combine; they never average, and there is no score.
200
+
201
+ Deterministic checks stay the reviewer's responsibility under C10 and appear in the review
202
+ envelope as the checks it saw executed. Enforcement validates their presence, never their
203
+ result.
204
+
205
+ ## Neutral brief
206
+
207
+ Send only the filled fields below to the named reviewer or a fresh general subagent with
208
+ no inherited conversation. Keep test expectations and other reviewers' conclusions out.
209
+
210
+ ```text
211
+ You are the fresh <dimension> reviewer. Run /<review-skill> yourself; do not delegate.
212
+ Read-only: do not modify any file, including code, records, catalogs or fixtures.
213
+ Scope: <exact paths/symbols>; repository: <absolute path>.
214
+ Base: <ref/commit or standalone>; include relevant uncommitted and new files.
215
+ Use git diff and file reads, never git log or PR descriptions.
216
+ Original request: <requester wording, without builder choices or rationale>.
217
+ Factual constraints: <project targets, public contracts, independent sources>.
218
+ Records: <paths; check existence only until the expected matrix is frozen>.
219
+ Check evidence: <paths; read results after freezing, not implementation rationale>.
220
+ Undeclared changes: <change-set paths outside every declaration>.
221
+ Report your frozen matrix before opening the records. End with the domain report
222
+ and one verdict, or explain incomplete execution without attestation.
223
+ ```
224
+
225
+ ## Composition and expiry
226
+
227
+ One builder coordinates all applicable dimensions. Keep their records and verdicts distinct.
228
+ Historical transforming reviews run before final reviews. Independent reviewers can run in
229
+ parallel on one frozen final state, without exchanging rationale. Completion requires all
230
+ applicable dimensions `SOUND` on that same state; one verdict cannot compensate for another.
231
+
232
+ Any change to a file in a review's scope invalidates it, including prose. Shared files
233
+ invalidate all covering reviews. Without precise scope tracking, invalidate the whole
234
+ change's reviews. Identify the state with a commit plus the staged/unstaged diff and
235
+ untracked file contents or hashes; a clean HEAD alone does not identify a dirty worktree.
236
+ Record/schema/catalog changes also reopen the affected review. No generic orchestrator
237
+ is implied. An external index of scopes, hashes, record paths, checks and responses is enough.
238
+
239
+ A correction for one dimension moves the change set and therefore expires every verdict of
240
+ the task, because every reviewer's brief covers the whole diff. Corrections are therefore
241
+ batched: address every pending finding of every dimension, then reopen all applicable
242
+ reviews together on one state, frozen while they are in flight so no verdict binds to code
243
+ its reviewer never read. A review filed on a state that moved since it began is void.
244
+
245
+ If domain requests conflict, identify the incompatible invariants and reopen decisions
246
+ before writing. A dimension that turns non-`SOUND` on a state produced by correcting another
247
+ is a cross-dimension conflict, which the next briefs carry. Stop a repeating conflict for
248
+ user arbitration; never force a verdict. Bound the conflict rounds and the total rounds, and
249
+ send a task that reaches either bound to the user rather than looping.
250
+
251
+ ## Gate and portable execution
252
+
253
+ Inspect the installed gate's help/capabilities before using a dimension. Never invent CLI
254
+ flags, reuse a different dimension or treat a refused record as an absent gate. A gate
255
+ validates shape, membership and referential integrity; the reviewer owns semantic judgment
256
+ and only attests SOUND. The gate computes its own fingerprints and accepts none. Fix a
257
+ refused record before continuing that workflow.
258
+
259
+ The suite's own gate is `ai-engineering-gate`, generic by construction: it derives state from
260
+ evidence and holds no domain rule. Enforcement it applies covers omission, drift and stale
261
+ evidence, not a deliberately forged evidence index. A harness Stop hook is advisory by design
262
+ of the harnesses; the lock on publication is the gate's exit code, consumed by a delivery
263
+ pipeline gate or a CI check.
264
+
265
+ Without a compatible gate, portable completion consists of validated records, successful
266
+ checks and an independent report tied to the examined state. It provides no automatic
267
+ enforcement or lock. If the project's workflow requires gate attestation, an absent or
268
+ unsupported gate leaves that workflow incomplete; portable evidence cannot replace it.
269
+ Keep evidence available through review/correction; do not reconstruct missing historical
270
+ decisions as if they preceded implementation.