gemstack-ai 1.3.0 → 1.4.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.
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "version": "0.1",
3
- "current_phase": "shipped",
3
+ "current_phase": "closure",
4
4
  "status": "SHIPPED",
5
5
  "stop_reason": "UPGRADE_C_SHIPPED_DONE",
6
- "active_spec": null,
6
+ "active_spec": "specs/010-agent-swarm-visual-qa",
7
7
  "completed_phases": [
8
8
  "spec",
9
9
  "plan",
10
10
  "tasks"
11
11
  ],
12
12
  "phase_hashes": {
13
- "spec": "9241b9e992f687e80ecef388c79731ece7af9aa75ba989dc8f0b1e9b855f7914",
14
- "plan": "6a2e29e9aeda266a71ab435fa09bca3b18521835a69f6020cd8d9f135643e3aa",
15
- "tasks": "1697c32a1f6596f317491df68cd1b161e5c77fbbddc74ce3f1e6e00a42619249"
13
+ "spec": "767c75151f9c53a70cfa6fcec85d29bccf5e3021004580878fb81ea3c4955ed7",
14
+ "plan": "d6f960f97bc6bcdb20daddc3c749c5f9f155c1407e0a8b81210cdf350bdad72c",
15
+ "tasks": "9931dda795d31bf29349ba5f20dc7631cb6a8974b91134ff577c57dd6b9aad7e"
16
16
  },
17
17
  "consistency": {
18
18
  "status": "PASS",
@@ -25,4 +25,4 @@
25
25
  },
26
26
  "last_update": "2026-09-11T17:38:04.916Z",
27
27
  "last_completed_feature": "specs/008-cost-provider-safety-gates"
28
- }
28
+ }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,60 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [v1.4.0] - 2026-09-11
6
+
7
+ ### Added
8
+ - **Agent Swarm Planning & Validation (Upgrade E)**: Deterministic multi-worker wave planning and coordination verification framework.
9
+ - Deterministic swarm planning contracts and canonical `swarm.json` manifest schema.
10
+ - Task ownership and write-set partitioning: enforces disjoint write boundaries per wave (`write_set(T1) ∩ write_set(T2) = ∅`).
11
+ - Write-collision detection: automatically detects overlapping write sets and serializes conflicting tasks into sequential waves.
12
+ - Dependency wave scheduling: preserves task prerequisite graphs and rejects circular dependencies (`SWARM_DEPENDENCY_CYCLE`).
13
+ - Task-scoped context projections: compiles minimal, role-tailored contexts derived from `context-capsule.json`.
14
+ - Context freshness validation: verifies live capsule hash against `source_capsule_hash` to reject stale projections (`SWARM_CONTEXT_STALE`).
15
+ - Separation of duties gate: mechanically enforces `AUTHOR != REVIEWER` (`SWARM_SELF_REVIEW_DETECTED`).
16
+ - Provider policy and budget gating: integrates with Upgrade C `ProviderCapabilityGate` and `BillableActionGate` to prevent budget runaway.
17
+ - Subagent limits enforcement: strictly blocks unauthorized recursive worker spawning.
18
+ - Pure offline read-only verification (Stage 5.3 in `gemstack verify`): validates swarm manifests without worker or agent execution.
19
+ - Explicit non-execution invariant: Gemstack core does NOT execute autonomous coding agents.
20
+ - **Visual QA Evidence (Upgrade E)**: Mechanical, offline visual verification architecture based on cryptographic digests and neutral masking.
21
+ - Canonical `visual-qa.json` manifest schema declaring route, deterministic viewport dimensions, and approved baseline references.
22
+ - Deterministic viewport specifications: standard profiles with explicit width, height, and device scale factor.
23
+ - Cryptographic baseline pinning: baseline images tracked via canonical SHA-256 byte digests (`image_sha256`).
24
+ - Tampering detection: flags baseline image mutations on disk (`VQA_BASELINE_TAMPERED`).
25
+ - Neutral selector masking: masks dynamic elements (`[MASKED_NEUTRAL]`) to prevent flaky subpixel and timestamp diffs.
26
+ - Mandatory automatic password & credential masking: automatically replaces sensitive input fields (`type=password`, `data-sensitive=true`) with `[MASKED_SECRET]`.
27
+ - Structured visual evidence comparison: fast SHA-256 digest match path with offline tolerance-bounded diffing (`max_diff_percentage`).
28
+ - Explicit baseline promotion: baselines are NEVER auto-updated or healed during test or verify; requires explicit `gemstack vqa promote <scenario-id>`.
29
+ - Pure offline read-only verification (Stage 5.4 in `gemstack verify`): zero browser launches, zero network calls, zero file mutations.
30
+ - Explicit non-execution invariant: Gemstack core does NOT launch browsers and does NOT capture screenshots automatically.
31
+ - **New CLI Surfaces**:
32
+ - `gemstack swarm plan [--json]`: compiles `tasks.md` into deterministic concurrent waves.
33
+ - `gemstack swarm validate [--json]`: validates write partitions, review separation, and context freshness.
34
+ - `gemstack vqa validate [--json]` (or `gemstack visual validate`): validates visual QA manifests, viewports, baselines, and evidence offline.
35
+ - `gemstack vqa promote <scenario-id>` (or `gemstack visual promote`): explicitly promotes live evidence to approved canonical baseline.
36
+
37
+ ### Changed
38
+ - `gemstack verify` extended with Stage 5.3 (Swarm Audit) and Stage 5.4 (Visual QA Audit) running in pure read-only mode.
39
+ - `src/lib/closure-context.js` updated to track `swarm.json` and `visual-qa.json` in closure context hashing, and support alphanumeric task IDs (`UE-T001`..`T029`).
40
+ - `package.json` test script updated to register the 5 new Upgrade E test suites.
41
+
42
+ ### Compatibility
43
+ - 100% backward compatible with existing Gemstack repositories and frozen contracts from Upgrades A, B, C, and D.
44
+ - Zero external runtime npm dependencies added (`package.json` dependencies remain `{}`).
45
+ - Zero external development npm dependencies added (`package.json` devDependencies remain `{}`).
46
+
47
+ ### Validation
48
+ - 29/29 Upgrade E tasks COMPLETE.
49
+ - 20/20 Upgrade E canonical acceptance tests passing (`TEST-SWARM-A01`..`E02`, `TEST-VISUAL-A01`..`E02`).
50
+ - 10/10 Upgrade E bootstrap contracts passing.
51
+ - 26/26 adversarial test cases passing.
52
+ - 126/126 physical tests passing across 14 suites with 0 failures and 0 skipped.
53
+ - Full CI test matrix (`npm run ci:all`) passing cleanly.
54
+ - `gemstack verify` exit code 0 with 0 errors and 0 open blockers.
55
+ - Swarm manifest verified: `VALID` and `FRESH`.
56
+ - Visual QA manifest verified: `VALID` and `FRESH`.
57
+ - Closure evidence: `specs/010-agent-swarm-visual-qa/closure.json` status `VERIFIED`.
58
+
5
59
  ## [v1.3.0] - 2026-09-11
6
60
 
7
61
  ### Added
package/README.md CHANGED
@@ -118,6 +118,7 @@ Gemstack Upgrade C guarantees fail-closed safety for commercial, remote, and AI
118
118
  - **Environment Safety**: Commercial provider execution is forbidden in `test` and `ci` environments.
119
119
  - **Trusted Mock Boundaries**: Test mocks operate strictly in memory with zero network escapes.
120
120
  - **Offline Purity**: `gemstack verify` runs 100% offline with zero external network or provider charges.
121
+ - **Core Invariant**: `NO PROOF OF AUTHORIZATION = NO COMMERCIAL EXECUTION`.
121
122
 
122
123
  ## 📦 Context Capsule & Compression
123
124
 
@@ -130,18 +131,73 @@ Gemstack Upgrade D enables deterministic, constraint-lossless context compressio
130
131
  - **Size Budgeting**: 32 KB target budget with deterministic priority condensation and 64 KB fail-closed hard cap.
131
132
  - **`gemstack context show`**: Displays human-readable continuation context summary or raw JSON.
132
133
  - **`gemstack context verify`**: Read-only validation of context capsule freshness and integrity.
134
+ - **Core Invariant**: `Context Capsule = derived continuation context NOT project authority`.
135
+
136
+ ## 🐝 Agent Swarm Planning & Validation
137
+
138
+ Gemstack Upgrade E introduces deterministic multi-worker planning and write-set partition validation:
139
+ - **`gemstack swarm plan`**: Compiles parallelizable `tasks.md` items into deterministic concurrent waves in `specs/<feature>/swarm.json`.
140
+ - **Exclusive Write Boundaries**: Validates that concurrent tasks possess strictly disjoint write sets (`write_set(T1) ∩ write_set(T2) = ∅`), mathematically preventing write collisions.
141
+ - **Collision Avoidance**: Overlapping write sets are automatically serialized into sequential waves (`SWARM_WRITE_COLLISION_PREVENTED`).
142
+ - **Separation of Duties Gate**: Non-waivable mechanical check enforcing `author != reviewer` on all task reviews (`SWARM_SELF_REVIEW_DETECTED`).
143
+ - **Task-Scoped Context Projections**: Projects minimal, structured context payloads derived from `context-capsule.json` without raw chat transcripts or prompt noise.
144
+ - **Provider & Budget Integration**: Intercepts model invocations via Upgrade C `ProviderCapabilityGate` and `BillableActionGate` to prevent budget breaches.
145
+ - **`gemstack swarm validate`**: Pure read-only validation of wave partitions, task ownership, and review independence.
146
+ - **Explicit Boundary**: *Gemstack core coordinates and validates; Gemstack core does NOT execute autonomous coding agents.*
147
+
148
+ ## 👁️ Visual QA Evidence & Offline Verification
149
+
150
+ Gemstack Upgrade E provides mechanical visual verification grounded in cryptographic digests and offline comparisons:
151
+ - **Canonical Visual Manifest (`visual-qa.json`)**: Declares scenario routes, deterministic viewports, selector masks, baseline digests, and diff tolerances.
152
+ - **Deterministic Viewports**: Standardized profiles (Desktop, Mobile, Tablet) with locked width, height, and device scale factor.
153
+ - **Cryptographic Baseline Hashing**: Baselines are tracked and pinned via canonical SHA-256 hashes (`image_sha256`); flags disk tampering (`VQA_BASELINE_TAMPERED`).
154
+ - **Neutral & Secret Masking**: Eliminates dynamic timestamp/counter diff flakiness (`[MASKED_NEUTRAL]`) and enforces mandatory automatic masking on password and credential fields (`[MASKED_SECRET]`).
155
+ - **Structured Evidence Comparison**: Fast SHA-256 match path with offline tolerance-bounded diffing (`max_diff_percentage`).
156
+ - **Explicit Promotion Semantics**: Baselines are NEVER auto-updated or healed during test or verify; requires explicit `gemstack vqa promote <scenario-id>`.
157
+ - **`gemstack vqa validate`**: Pure read-only offline validation of manifests, baselines, and evidence completeness.
158
+ - **Explicit Boundary**: *Gemstack core inspects and diffs evidence; Gemstack core does NOT launch browsers and does NOT capture screenshots automatically. Capture remains external/adapted.*
159
+
160
+ ## 🏛️ Architectural Principles
161
+
162
+ Gemstack operates on strict, non-negotiable architectural principles:
163
+
164
+ ```text
165
+ authority > derived artifacts
166
+ evidence ≠ authority
167
+ verify = validate
168
+ agent output ≠ architecture
169
+ visual evidence ≠ architecture
170
+ credentials ≠ authorization
171
+ provider availability ≠ permission
172
+ unknown cost ≠ free
173
+ fallback ≠ inherited authorization
174
+ agent says done ≠ task mechanically complete
175
+ author ≠ reviewer where independent review is required
176
+ ```
133
177
 
134
- ## 🐝 Advanced Autonomy (The WOW Update)
178
+ ## 💻 CLI Reference
135
179
 
136
- Gemstack isn't just passive documents; it actively orchestrates agentic capabilities:
180
+ Gemstack provides a focused, deterministic CLI surface:
137
181
 
138
- | Command | Action |
139
- |---------|--------|
140
- | `/swarm` | Orchestrates parallel subagents for tasks marked `[P]` |
141
- | `/qa-visual` | Spawns sandbox browsers to visually assert Acceptance Criteria |
142
- | `/dashboard` | Generates a rich, interactive inline UI of your project's progress |
143
- | `/heal` | Hooks into GitHub CLI (`gh`) to read failing CI logs and auto-push fixes |
144
- | `/sandbox` | Wraps risky AI execution inside an ephemeral Docker container |
182
+ ```bash
183
+ # Core verification & collection
184
+ gemstack verify [--json] [--target <dir>] # 6-stage read-only audit (0 mutations, 0 network)
185
+ gemstack collect [--target <dir>] # Executes test runner & records closure.json
186
+ gemstack ship [--target <dir>] # Transitions lifecycle to SHIPPED if closure is VERIFIED
187
+
188
+ # Context capsule (Upgrade D)
189
+ gemstack context generate [--force] # Compiles deterministic context-capsule.json
190
+ gemstack context show [--raw] # Displays continuation context summary or JSON
191
+ gemstack context verify # Verifies capsule freshness and provenance
192
+
193
+ # Agent swarm (Upgrade E)
194
+ gemstack swarm plan [--json] # Compiles tasks into disjoint concurrent waves
195
+ gemstack swarm validate [--json] # Validates write sets and review attestations
196
+
197
+ # Visual QA (Upgrade E)
198
+ gemstack vqa validate [--json] # Validates visual manifest, viewports, and baselines
199
+ gemstack vqa promote <scenario-id> # Explicitly promotes live evidence to baseline
200
+ ```
145
201
 
146
202
  ## 🪝 Active Security (Git Hooks)
147
203
 
@@ -157,6 +213,7 @@ You can install agent skills created by the community directly into your project
157
213
  npx gemstack-ai install https://raw.githubusercontent.com/community/gemstack-skills/main/django-expert/SKILL.md
158
214
  ```
159
215
 
216
+
160
217
  ## 🤖 MCP Server (Model Context Protocol)
161
218
 
162
219
  Gemstack ships with a built-in MCP server that exposes the SDD state of your project to any MCP-compliant AI client (like Claude Desktop or Cursor).
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Gemstack Release Notes
2
2
 
3
+ # Gemstack v1.4.0 — Agent Swarm & Visual QA
4
+
5
+ ## Highlights
6
+
7
+ ### Upgrade E — Agent Swarm Planning & Validation
8
+ - **Deterministic Multi-Worker Planning**: Compiles parallelizable `tasks.md` items into deterministic, phased execution waves recorded in canonical `swarm.json`.
9
+ - **Task Ownership & Exclusive Write Boundaries**: Validates that concurrent tasks possess strictly disjoint file write partitions (`write_set(T1) ∩ write_set(T2) = ∅`), completely preventing parallel write collisions.
10
+ - **Automatic Collision Avoidance**: Automatically serializes conflicting tasks into sequential waves during planning (`SWARM_WRITE_COLLISION_PREVENTED`).
11
+ - **Separation of Duties Gate**: Non-waivable mechanical check enforcing `author != reviewer` on all task reviews (`SWARM_SELF_REVIEW_DETECTED`).
12
+ - **Task-Scoped Context Projections**: Projects minimal, structured context payloads derived from Upgrade D `context-capsule.json` with conversational narrative and raw chat transcripts strictly excluded.
13
+ - **Cryptographic Provenance & Freshness**: Pinned `source_capsule_hash` ensures workers operate against verified project state; flags drift fail-closed (`SWARM_CONTEXT_STALE`).
14
+ - **Provider & Budget Gating**: Intercepts model invocations via Upgrade C `ProviderCapabilityGate` and `BillableActionGate` to prevent runaway spending across concurrent workers.
15
+ - **Worker Limits**: Prevents recursive child agent spawning (`SWARM_RECURSIVE_SPAWN_DENIED`).
16
+ - **Explicit Invariant**: Gemstack core coordinates and validates; it does NOT execute autonomous coding agents.
17
+
18
+ ### Upgrade E — Visual QA Evidence & Offline Verification
19
+ - **Canonical Visual QA Manifest (`visual-qa.json`)**: Declares explicit routes, deterministic viewports, selector masks, baseline references, and diff tolerances.
20
+ - **Deterministic Viewport Specifications**: Locks standardized viewport profiles (Desktop, Mobile, Tablet) with explicit width, height, and device scale factor.
21
+ - **Cryptographic Baseline Hashing**: Baselines are tracked and verified via canonical SHA-256 byte digests (`image_sha256`); flags disk tampering (`VQA_BASELINE_TAMPERED`).
22
+ - **Neutral & Secret Selector Masking**: Neutral masks (`[MASKED_NEUTRAL]`) eliminate font/timestamp flakiness; mandatory automatic masking replaces sensitive input fields (`type=password`) with `[MASKED_SECRET]`.
23
+ - **Structured Evidence Comparison**: Fast SHA-256 digest comparison with offline tolerance-bounded diffing (`max_diff_percentage`).
24
+ - **Explicit Baseline Promotion**: Baselines are NEVER mutated during verification; updates require explicit `gemstack vqa promote <scenario-id>`.
25
+ - **Pure Offline Verification (Stages 5.3 & 5.4)**: `gemstack verify` runs 100% offline with zero browser launches, zero network calls, and zero file mutations.
26
+ - **Explicit Invariant**: Gemstack core inspects evidence; it does NOT launch browsers or capture screenshots.
27
+
28
+ ## Acceptance & Regression Baseline
29
+ - 25 Upgrade A canonical acceptance tests passing.
30
+ - 20 Upgrade B canonical acceptance tests passing.
31
+ - 20 Upgrade C canonical acceptance tests passing.
32
+ - 20 Upgrade D canonical acceptance tests passing.
33
+ - 20 Upgrade E canonical acceptance tests passing (`TEST-SWARM-A01`..`E02`, `TEST-VISUAL-A01`..`E02`).
34
+ - 10 Upgrade E bootstrap contracts passing.
35
+ - 26 Upgrade E adversarial cases passing.
36
+ - 105 total canonical acceptance tests passing.
37
+ - 126 total physical tests passing across 14 explicitly enumerated suites with 0 failures and 0 skipped.
38
+ - Full CI suite (`npm run ci:all`) passing cleanly.
39
+ - Upgrade E closed with closure status `VERIFIED`.
40
+
41
+ ---
42
+
3
43
  # Gemstack v1.3.0 — Cost & Provider Safety Gates + Context Capsule
4
44
 
5
45
  ## Highlights
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemstack-ai",
3
- "version": "1.3.0",
3
+ "version": "1.4.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 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",
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 tests/swarm-partitioning.test.js tests/swarm-review.test.js tests/visual-manifest.test.js tests/visual-diff.test.js tests/swarm-visual-purity.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",
@@ -316,7 +316,7 @@
316
316
  "value": true
317
317
  }
318
318
  ],
319
- "generated_at": "2026-09-11T18:39:24.919Z",
319
+ "generated_at": "2026-09-11T19:51:55.434Z",
320
320
  "generator": {
321
321
  "name": "gemstack",
322
322
  "version": "1.2.0"
@@ -352,16 +352,16 @@
352
352
  ],
353
353
  "project": {
354
354
  "active_feature": "specs/009-context-capsule",
355
- "current_phase": "shipped",
355
+ "current_phase": "closure",
356
356
  "lifecycle_status": "SHIPPED",
357
357
  "name": "gemstack-ai",
358
358
  "next_permitted_phase": "PLAN"
359
359
  },
360
360
  "provenance": {
361
- "source_set_hash": "c4f41904cf21ad6f8621e310650de48b7012c40a4a73010a62b37ea633d576b5",
361
+ "source_set_hash": "cb553121ecd975b8c39e1378e0ff07c9adb2d12ef323f2088c34c6780ca33077",
362
362
  "sources": [
363
363
  {
364
- "hash": "a38e279e94ee6bcfb8bae4e9bf407277cdc1c16491539ae6a66bc179befb0ab6",
364
+ "hash": "e7b3f8427fd31ef9d591b6752716ebbf1831d669c5000297a8816eeeaf5e6936",
365
365
  "path": ".gemstack/state.json",
366
366
  "role": "LIFECYCLE_STATE"
367
367
  },
@@ -0,0 +1,5 @@
1
+ {
2
+ "phase_hashes": {},
3
+ "historical_findings": [],
4
+ "accepted_exceptions": []
5
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "schema": "gemstack-closure",
3
+ "version": 1,
4
+ "feature": "specs/010-agent-swarm-visual-qa",
5
+ "generated_at": "2026-09-11T19:52:14.736Z",
6
+ "status": "VERIFIED",
7
+ "closure_context": {
8
+ "closure_context_hash": "8be65c934d6f21da5ea49237613ef80705121c7006061a55f6db2fa24216ef41",
9
+ "repository_type": "git",
10
+ "git_commit": "832550278fa95d3ed571c8ec2f7db9830ddd9ebc",
11
+ "working_tree_clean": false,
12
+ "relevant_files_digest": "d02611dc5c123f386294bb6807b2c424fbc1c4666586a3284686cfd99452a905"
13
+ },
14
+ "acceptance_signature": "4c62312b07e949480087e1bced495abfe44f137bf5a04ac5d87c8ef4ccd3fbeb",
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": 29,
37
+ "tasks_with_validation": 29,
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": 351
55
+ }
56
+ ],
57
+ "blockers": [],
58
+ "warnings": []
59
+ }