gemstack-ai 1.2.0 → 1.3.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/.gemstack/state.json +8 -7
- package/CHANGELOG.md +43 -0
- package/README.md +23 -0
- package/RELEASE_NOTES.md +37 -0
- package/{gemstack-ai-1.2.0.tgz → gemstack-ai-1.3.0.tgz} +0 -0
- package/handoff.md +14 -12
- package/package.json +2 -2
- package/specs/008-cost-provider-safety-gates/.gemstack.json +5 -0
- package/specs/008-cost-provider-safety-gates/closure.json +59 -0
- package/specs/008-cost-provider-safety-gates/plan.md +456 -0
- package/specs/008-cost-provider-safety-gates/spec.md +633 -0
- package/specs/008-cost-provider-safety-gates/tasks.md +635 -0
- package/specs/009-context-capsule/closure.json +59 -0
- package/specs/009-context-capsule/context-capsule.json +428 -0
- package/specs/009-context-capsule/plan.md +663 -0
- package/specs/009-context-capsule/spec.md +913 -0
- package/specs/009-context-capsule/tasks.md +720 -0
- package/src/cli.js +2 -0
- package/src/commands/context.js +95 -0
- package/src/commands/verify.js +54 -0
- package/src/lib/closure-context.js +9 -0
- package/src/lib/context-capsule.js +594 -0
- package/src/lib/cost-ledger.js +355 -0
- package/src/lib/provider-boundary.js +186 -0
- package/src/lib/provider-registry.js +265 -0
- package/src/lib/safety-gates.js +277 -0
package/.gemstack/state.json
CHANGED
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
"version": "0.1",
|
|
3
3
|
"current_phase": "shipped",
|
|
4
4
|
"status": "SHIPPED",
|
|
5
|
-
"stop_reason": "
|
|
5
|
+
"stop_reason": "UPGRADE_C_SHIPPED_DONE",
|
|
6
6
|
"active_spec": null,
|
|
7
7
|
"completed_phases": [
|
|
8
8
|
"spec",
|
|
9
|
-
"plan"
|
|
9
|
+
"plan",
|
|
10
|
+
"tasks"
|
|
10
11
|
],
|
|
11
12
|
"phase_hashes": {
|
|
12
|
-
"spec": "
|
|
13
|
-
"plan": "
|
|
14
|
-
"tasks": "
|
|
13
|
+
"spec": "9241b9e992f687e80ecef388c79731ece7af9aa75ba989dc8f0b1e9b855f7914",
|
|
14
|
+
"plan": "6a2e29e9aeda266a71ab435fa09bca3b18521835a69f6020cd8d9f135643e3aa",
|
|
15
|
+
"tasks": "1697c32a1f6596f317491df68cd1b161e5c77fbbddc74ce3f1e6e00a42619249"
|
|
15
16
|
},
|
|
16
17
|
"consistency": {
|
|
17
18
|
"status": "PASS",
|
|
@@ -22,6 +23,6 @@
|
|
|
22
23
|
"freeze": false,
|
|
23
24
|
"allowed_paths": []
|
|
24
25
|
},
|
|
25
|
-
"last_update": "2026-09-
|
|
26
|
-
"last_completed_feature": "specs/
|
|
26
|
+
"last_update": "2026-09-11T17:38:04.916Z",
|
|
27
|
+
"last_completed_feature": "specs/008-cost-provider-safety-gates"
|
|
27
28
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [v1.3.0] - 2026-09-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **Cost & Provider Safety Gates (Upgrade C)**: Deterministic, fail-closed safety and cost verification framework for commercial, external, and AI provider interactions.
|
|
9
|
+
- `ProviderCapabilityGate`: validates that requested capabilities are declared and supported by the active provider adapter before invocation.
|
|
10
|
+
- `BillableActionGate`: blocks billable actions unless explicit spending authorization tokens are granted.
|
|
11
|
+
- Provider Registry: canonical provider directory with declared capability contracts and deterministic rejection of unknown providers.
|
|
12
|
+
- Cost Ledger (`cost-ledger.json`): auditable schema validating provider cost assumptions, freshness thresholds, and currency units.
|
|
13
|
+
- Fail-Closed Unknown Cost Policy: unclassified or ambiguous operations are strictly treated as commercial rather than defaulted to free.
|
|
14
|
+
- Environment Safety Isolation: prevents accidental commercial provider invocations in `test` and `ci` environments even if ambient credentials exist.
|
|
15
|
+
- Trusted Mock Boundaries: enforces that test mocks execute strictly in memory with zero network escapes.
|
|
16
|
+
- Re-Entrant Fallback Authorization: secondary fallback providers trigger independent gate re-evaluation before execution.
|
|
17
|
+
- Verification Purity: guarantees `gemstack verify` executes offline with zero network sockets and zero ledger file mutations.
|
|
18
|
+
- **Context Capsule / Context Compression (Upgrade D)**: Deterministic, auditable, constraint-lossless context compression architecture for cross-session AI continuation.
|
|
19
|
+
- Deterministic Context Capsule Generation: compiles authoritative sources (`spec.md`, `plan.md`, `tasks.md`, `.gemstack/state.json`, `closure.json`) into `context-capsule.json`.
|
|
20
|
+
- Constraint-Lossless Compression: 100% of normative `MUST` and `MUST NOT` constraints, frozen contracts, and acceptance signatures survive compression.
|
|
21
|
+
- Canonical Authority Precedence: authoritative repository sources unconditionally govern over derived capsule claims (`SPEC` > `PLAN` > `TASKS` > implementation).
|
|
22
|
+
- Provenance & Freshness Hashing: live SHA-256 source digests detect drift or manual tampering immediately (`STALE` / `TAMPERED`).
|
|
23
|
+
- Strict Secrets Defense: automatic regex and property pattern scanner rejects tokens, API keys, private keys, and `.env` references fail-closed.
|
|
24
|
+
- Size Budget Enforcement: 32 KB target budget with deterministic 3-tier condensation and 64 KB fail-closed hard limit.
|
|
25
|
+
- Pure Offline & Atomic Writing: generation and validation execute 100% offline with atomic write semantics (`.tmp` + rename).
|
|
26
|
+
- Read-Only Verification (Stage 5.2): `gemstack verify` inspects context capsule freshness without disk writes or file mutation.
|
|
27
|
+
- New CLI Surface: `gemstack context generate`, `gemstack context show`, and `gemstack context verify`.
|
|
28
|
+
- Progressive Legacy Support: repositories or features lacking capsules operate cleanly with informational notices and zero blockers.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- `gemstack verify` pipeline extended to include Stage 5.2 Context Capsule read-only audit.
|
|
32
|
+
- `package.json` test script updated to explicitly enumerate all 25 physical test suites across Upgrades A, B, C, and D.
|
|
33
|
+
- Closure context resolution (`src/lib/closure-context.js`) incorporates `context-capsule.json` in relevant files hashing.
|
|
34
|
+
|
|
35
|
+
### Compatibility
|
|
36
|
+
- 100% backward compatible with existing Gemstack repositories and frozen contracts from Upgrades A, B, and C.
|
|
37
|
+
- Zero external runtime npm dependencies added (`package.json` dependencies remain `{}`).
|
|
38
|
+
|
|
39
|
+
### Validation
|
|
40
|
+
- 20/20 Upgrade C canonical acceptance tests passing (`TEST-COST-A01` through `H01`).
|
|
41
|
+
- 20/20 Upgrade D canonical acceptance tests passing (`TEST-CONTEXT-A01` through `H01`).
|
|
42
|
+
- 85/85 combined canonical acceptance tests passing (25 Upgrade A + 20 Upgrade B + 20 Upgrade C + 20 Upgrade D).
|
|
43
|
+
- 100/100 physical tests passing with 0 failures and 0 regressions.
|
|
44
|
+
- Full CI test matrix (`npm run ci:all`) passing cleanly.
|
|
45
|
+
- `gemstack verify` exit code 0 with 0 errors and 0 open blockers.
|
|
46
|
+
- Context capsule verified: `VALID` and `FRESH` (11,873 bytes < 32 KB budget).
|
|
47
|
+
|
|
5
48
|
## [v1.2.0] - 2026-09-11
|
|
6
49
|
### Added
|
|
7
50
|
- **Mechanical Test Matrix & Closure Evidence (Upgrade B)**: Full mechanical closure verification framework eliminating false closure and test discovery hallucinations.
|
package/README.md
CHANGED
|
@@ -108,6 +108,29 @@ Gemstack Upgrade B guarantees that what was planned is what was physically teste
|
|
|
108
108
|
- **`gemstack ship`**: Gatekeeper requiring verified evidence before allowing transition to `SHIPPED`.
|
|
109
109
|
- **Git Optionality & Legacy Support**: Works identically on clean Git, dirty Git, and non-Git projects, with graceful legacy fallback.
|
|
110
110
|
|
|
111
|
+
## 🛡️ Cost & Provider Safety Gates
|
|
112
|
+
|
|
113
|
+
Gemstack Upgrade C guarantees fail-closed safety for commercial, remote, and AI providers:
|
|
114
|
+
- **`ProviderCapabilityGate`**: Validates provider capability declarations before invocation without network attempts.
|
|
115
|
+
- **`BillableActionGate`**: Enforces strict spending authorization tokens before executing billable operations.
|
|
116
|
+
- **Cost Ledger (`cost-ledger.json`)**: Auditable schema tracking provider cost assumptions, freshness thresholds, and currency units.
|
|
117
|
+
- **Fail-Closed Unknown Cost Policy**: Operations with unclassified or ambiguous costs are strictly blocked.
|
|
118
|
+
- **Environment Safety**: Commercial provider execution is forbidden in `test` and `ci` environments.
|
|
119
|
+
- **Trusted Mock Boundaries**: Test mocks operate strictly in memory with zero network escapes.
|
|
120
|
+
- **Offline Purity**: `gemstack verify` runs 100% offline with zero external network or provider charges.
|
|
121
|
+
|
|
122
|
+
## 📦 Context Capsule & Compression
|
|
123
|
+
|
|
124
|
+
Gemstack Upgrade D enables deterministic, constraint-lossless context compression for cross-session continuation:
|
|
125
|
+
- **`gemstack context generate`**: Compiles authoritative specifications, plans, tasks, contracts, and closure evidence into `context-capsule.json`.
|
|
126
|
+
- **Constraint Losslessness**: 100% of normative `MUST`/`MUST NOT` constraints, frozen contracts, and acceptance criteria survive compression.
|
|
127
|
+
- **Authority Precedence**: Authoritative repository artifacts unconditionally override derived capsule claims (`SPEC` > `PLAN` > `TASKS` > implementation).
|
|
128
|
+
- **Drift & Tampering Detection**: Live SHA-256 source hashing flags modified or manually tampered capsules as `STALE`.
|
|
129
|
+
- **Secret Defense**: Fail-closed regex scanning strictly blocks credentials, tokens, private keys, and `.env` data.
|
|
130
|
+
- **Size Budgeting**: 32 KB target budget with deterministic priority condensation and 64 KB fail-closed hard cap.
|
|
131
|
+
- **`gemstack context show`**: Displays human-readable continuation context summary or raw JSON.
|
|
132
|
+
- **`gemstack context verify`**: Read-only validation of context capsule freshness and integrity.
|
|
133
|
+
|
|
111
134
|
## 🐝 Advanced Autonomy (The WOW Update)
|
|
112
135
|
|
|
113
136
|
Gemstack isn't just passive documents; it actively orchestrates agentic capabilities:
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Gemstack Release Notes
|
|
2
2
|
|
|
3
|
+
# Gemstack v1.3.0 — Cost & Provider Safety Gates + Context Capsule
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
### Upgrade C — Cost & Provider Safety Gates
|
|
8
|
+
- **Deterministic Provider & Capability Validation (`ProviderCapabilityGate`)**: Validates requested provider capabilities ahead of invocation and fail-closes on undeclared or unsupported capabilities without network calls.
|
|
9
|
+
- **Spending Authorization Barrier (`BillableActionGate`)**: Enforces the central invariant "NO PROOF = NO EXECUTION"; commercial or billable actions are strictly blocked unless accompanied by valid explicit spending tokens.
|
|
10
|
+
- **Auditable Cost Ledger (`cost-ledger.json`)**: Machine-readable schema establishing strict freshness dates, provider cost classifications, and zero-secrets immunity.
|
|
11
|
+
- **Fail-Closed Unknown Cost Policy**: Unclassified or unknown operations are never assumed free; they are treated fail-closed as commercial risks.
|
|
12
|
+
- **Environment Safety & CI Isolation**: Prevents accidental commercial provider calls during tests and CI builds regardless of ambient developer credentials.
|
|
13
|
+
- **Trusted Mock Enforcement**: Verifies in-memory mocks remain isolated and fail-closed against external network socket leaks.
|
|
14
|
+
- **Re-Entrant Provider Fallback**: Fallback target providers trigger independent gate re-evaluation before execution.
|
|
15
|
+
- **Verification Purity**: Guarantees `gemstack verify` runs strictly offline with zero provider charges and zero file mutations.
|
|
16
|
+
|
|
17
|
+
### Upgrade D — Context Capsule / Context Compression
|
|
18
|
+
- **Deterministic Context Compression**: Compiles authoritative specification, plan, tasks, lifecycle, and closure artifacts into compact, machine-readable continuation context (`context-capsule.json`).
|
|
19
|
+
- **Constraint-Lossless Compression**: 100% of normative behavioral constraints (`MUST`, `MUST NOT`), frozen architectural contracts, and acceptance criteria survive compression without semantic loss.
|
|
20
|
+
- **Canonical Authority Precedence**: Authoritative repository artifacts unconditionally govern over derived capsule claims (`SPEC` > `PLAN` > `TASKS` > implementation).
|
|
21
|
+
- **Cryptographic Provenance & Drift Detection**: Live SHA-256 source digests detect artifact modifications or tampering immediately (`STALE` / `TAMPERED`).
|
|
22
|
+
- **Strict Secrets Barrier**: Automated regex scanner blocks credential properties (`apiKey`, `token`, `secret`, `clientSecret`), token patterns (`sk-...`, `AIza...`, `ghp_...`), private keys, and `.env` references.
|
|
23
|
+
- **Deterministic Size Budgeting**: 32 KB target budget with prioritized 3-tier condensation and a 64 KB hard fail-closed limit.
|
|
24
|
+
- **Read-Only Verification (Stage 5.2)**: `gemstack verify` inspects context capsule freshness without modifying or rewriting disk state.
|
|
25
|
+
- **CLI Commands**: `gemstack context generate`, `gemstack context show`, and `gemstack context verify`.
|
|
26
|
+
- **Zero Runtime Dependencies**: Native Node.js standard library implementation (`node:crypto`, `node:fs`, `node:path`, `node:test`).
|
|
27
|
+
|
|
28
|
+
## Acceptance & Regression Baseline
|
|
29
|
+
- 25 Upgrade A canonical acceptance tests passing (`TEST-CONSISTENCY-A01` through `H02`).
|
|
30
|
+
- 20 Upgrade B canonical acceptance tests passing (`TEST-CLOSURE-A01` through `H01`).
|
|
31
|
+
- 20 Upgrade C canonical acceptance tests passing (`TEST-COST-A01` through `H01`).
|
|
32
|
+
- 20 Upgrade D canonical acceptance tests passing (`TEST-CONTEXT-A01` through `H01`).
|
|
33
|
+
- 85 total canonical acceptance tests passing.
|
|
34
|
+
- 100 total physical tests passing across 25 explicitly enumerated suites.
|
|
35
|
+
- Full CI suite (`npm run ci:all`) passing with 0 warnings and 0 errors.
|
|
36
|
+
- Both Upgrade C and Upgrade D closed with closure status `VERIFIED`.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
3
40
|
# Gemstack v1.2.0 — Mechanical Test Matrix & Closure Evidence
|
|
4
41
|
|
|
5
42
|
## Highlights
|
|
Binary file
|
package/handoff.md
CHANGED
|
@@ -8,16 +8,18 @@ Evolucionar Gemstack incorporando el feedback de producción real de proyectos a
|
|
|
8
8
|
4. Comando unificado `gemstack verify` (alias `audit`) para auditoría integral en un solo paso.
|
|
9
9
|
|
|
10
10
|
## 2. Estado actual
|
|
11
|
-
- **Upgrade A (Consistency Core & Phase Freezing)**: CERRADO Y PUBLICADO OFICIALMENTE
|
|
12
|
-
- **Upgrade B (Mechanical Test Matrix & Closure Evidence)**: CERRADO Y
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
11
|
+
- **Upgrade A (Consistency Core & Phase Freezing)**: CERRADO Y PUBLICADO OFICIALMENTE en `v1.1.2`.
|
|
12
|
+
- **Upgrade B (Mechanical Test Matrix & Closure Evidence)**: CERRADO Y PUBLICADO OFICIALMENTE en `v1.2.0`.
|
|
13
|
+
- **Upgrade C (Cost & Provider Safety Gates)**: CERRADO Y VERIFICADO (`closure.json` status `VERIFIED`).
|
|
14
|
+
- 20/20 pruebas canónicas P1 de Upgrade C pasando al 100% en 6 suites dedicadas.
|
|
15
|
+
- Gates `ProviderCapabilityGate` y `BillableActionGate` implementados con fail-closed default deny.
|
|
16
|
+
- Cost ledger (`cost-ledger.json`) validado, offline verification purity garantizada.
|
|
17
|
+
- **Upgrade D (Context Capsule / Context Compression)**: CERRADO Y VERIFICADO (`closure.json` status `VERIFIED`, capsule `VALID` y `FRESH`).
|
|
18
|
+
- 20/20 pruebas canónicas de Upgrade D pasando al 100% en 8 suites dedicadas.
|
|
19
|
+
- Serializador canónico determinista, defensa de secretos fail-closed, presupuesto 32KB/64KB.
|
|
20
|
+
- Comandos CLI `gemstack context` y etapa 5.2 en `gemstack verify`.
|
|
21
|
+
- 100/100 pruebas físicas totales pasando en 25 suites sin dependencias externas.
|
|
22
|
+
- Preparado para release estable `v1.3.0`.
|
|
21
23
|
|
|
22
24
|
## 3. Archivos y cambios
|
|
23
25
|
- `src/lib/test-matrix.js`: Parser de `gemstack-test-matrix`, validación de esquema de 20 tests canónicos y cálculo de `acceptanceSignature` canónico SHA-256.
|
|
@@ -41,5 +43,5 @@ Evolucionar Gemstack incorporando el feedback de producción real de proyectos a
|
|
|
41
43
|
- **Closure Manifest Self-Reference**: Al incluir `specs/<feature>/closure.json` en los archivos de implementación de `tasks.md`, `closureContextHash` cambiaba cada vez que `closure.json` era escrito, provocando que la evidencia se marcara como `STALE` inmediatamente después de recolectarse. Se resolvió excluyendo explícitamente `closure.json` de la agregación de hashes de contexto de implementación (`implementationContextHash`).
|
|
42
44
|
|
|
43
45
|
## 5. Próximos pasos
|
|
44
|
-
1. Completar la publicación de la versión minor v1.
|
|
45
|
-
2.
|
|
46
|
+
1. Completar la publicación y git tag de la versión minor `v1.3.0`.
|
|
47
|
+
2. Proceder a Upgrade E (SPEC ONLY) una vez autorizada la fase siguiente.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gemstack-ai",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Agentic Spec-Driven Development framework for Gemini/Antigravity",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"node": ">=18.18.0"
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
|
-
"test": "node --test tests/contracts.test.js tests/hasher.test.js tests/findings.test.js tests/init.test.js tests/verify.test.js tests/test-matrix.test.js tests/reconciliation.test.js tests/runner-adapter.test.js tests/traceability.test.js tests/closure-manifest.test.js tests/closure-gates.test.js",
|
|
13
|
+
"test": "node --test tests/contracts.test.js tests/hasher.test.js tests/findings.test.js tests/init.test.js tests/verify.test.js tests/test-matrix.test.js tests/reconciliation.test.js tests/runner-adapter.test.js tests/traceability.test.js tests/closure-manifest.test.js tests/closure-gates.test.js tests/cost-ledger.test.js tests/environment-provider-safety.test.js tests/provider-capability-gate.test.js tests/billable-action-gate.test.js tests/provider-fallback.test.js tests/verification-purity-cost.test.js tests/context-determinism.test.js tests/context-authority.test.js tests/context-freshness.test.js tests/context-constraints.test.js tests/context-secrets.test.js tests/context-size-budget.test.js tests/context-purity.test.js tests/context-legacy.test.js",
|
|
14
14
|
"gemstack:verify": "node src/cli.js verify",
|
|
15
15
|
"pack:dry": "npm pack --dry-run",
|
|
16
16
|
"ci:frontmatter": "node scripts/ci/check-frontmatter.js",
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "gemstack-closure",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"feature": "specs/008-cost-provider-safety-gates",
|
|
5
|
+
"generated_at": "2026-09-11T17:33:08.020Z",
|
|
6
|
+
"status": "VERIFIED",
|
|
7
|
+
"closure_context": {
|
|
8
|
+
"closure_context_hash": "551b1853a7bbac24decba595284104f24dc34f5feed858808e3f59bdfa36c7ff",
|
|
9
|
+
"repository_type": "git",
|
|
10
|
+
"git_commit": "1e19c3d7cc527099e6e7c74cbfdbd4cdf4c23584",
|
|
11
|
+
"working_tree_clean": false,
|
|
12
|
+
"relevant_files_digest": "5886c19984cde85fae8b2acdedc4a890b9f7d0e46df3622bc738de482325c625"
|
|
13
|
+
},
|
|
14
|
+
"acceptance_signature": "456b3799bb96ce72a8b82d9739bcf469b9fa1e9eb170a2726ea2308bcbb4cf9c",
|
|
15
|
+
"canonical_summary": {
|
|
16
|
+
"required_total": 20,
|
|
17
|
+
"required_passed": 20,
|
|
18
|
+
"supplemental_total": 0,
|
|
19
|
+
"supplemental_passed": 0
|
|
20
|
+
},
|
|
21
|
+
"physical_summary": {
|
|
22
|
+
"supporting_total": 6,
|
|
23
|
+
"supporting_passed": 6,
|
|
24
|
+
"total_executed": 26,
|
|
25
|
+
"total_passed": 26,
|
|
26
|
+
"total_failed": 0,
|
|
27
|
+
"total_skipped": 0
|
|
28
|
+
},
|
|
29
|
+
"reconciliation": {
|
|
30
|
+
"math_valid": true,
|
|
31
|
+
"phantoms_detected": 0,
|
|
32
|
+
"orphans_detected": 0,
|
|
33
|
+
"missing_canonical_ids": []
|
|
34
|
+
},
|
|
35
|
+
"task_traceability_summary": {
|
|
36
|
+
"tasks_total": 20,
|
|
37
|
+
"tasks_with_validation": 20,
|
|
38
|
+
"tasks_documentation_only": 0,
|
|
39
|
+
"unmapped_canonical_tests": []
|
|
40
|
+
},
|
|
41
|
+
"required_gates": {
|
|
42
|
+
"project-tests": "PASS",
|
|
43
|
+
"gate-ci-frontmatter": "PASS",
|
|
44
|
+
"gate-ci-mojibake": "PASS"
|
|
45
|
+
},
|
|
46
|
+
"supplemental_gates": {},
|
|
47
|
+
"exceptions": [],
|
|
48
|
+
"evidence_sources": [
|
|
49
|
+
{
|
|
50
|
+
"type": "PACKAGE_SCRIPT",
|
|
51
|
+
"script": "test",
|
|
52
|
+
"runner": "node:test",
|
|
53
|
+
"exit_code": 0,
|
|
54
|
+
"duration_ms": 790
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"blockers": [],
|
|
58
|
+
"warnings": []
|
|
59
|
+
}
|