Skip to content

Drift soak check (week 1 post-governance) — PARTIAL: access scope blocked validate-strict.ts; constructs-side clean + pack-manifest Zod/JSON-Schema drift flagged #224

@zkSoju

Description

@zkSoju

Drift Soak Check — loa-compositions × schema family

Run: 2026-05-04T17:00:00Z (approx)
Window: 2026-04-28 → 2026-05-04
Verdict: ⚠ PARTIAL — strict validation blocked by access scope; constructs-side composition schema unchanged; secondary Zod/JSON-Schema drift detected in pack-manifest (not composition-blocking)


Blocker

The MCP session executing this check was scoped to loa-constructs only. loa-compositions and loa-hivemind returned Access denied on every MCP call. HTTPS git clone was also unavailable in the execution environment (no network credential path). As a result:

  • bun scripts/validate-strict.ts could not be run
  • Composition YAML inventory could not be taken
  • PR activity in loa-compositions could not be queried

Resolution: Re-run from a session whose MCP scope includes all three repos, or from a machine with git clone access. The rest of this report covers what was verifiable from the loa-constructs side.


Inventory

  • Compositions on main (loa-compositions): unknown — access blocked
  • PRs merged in window (loa-compositions): unknown — access blocked
  • Composition YAMLs added/modified in loa-compositions: unknown

loa-constructs activity in window (2026-04-28 → 2026-05-04)

Commit/PR Date Description Schema impact
34e9b41#221 2026-04-28 fix(compose-run): auto-detect /dev/tty absence, skip iterate prompts in non-interactive parent None
e3a250c#220 2026-04-28 chore(wip): bulk WIP — 5 skill symlinks, 2 composition drafts in grimoires/compositions/ (feel-image.yaml, collection-with-codex.yaml), arch specs, cycle tracks None — drafts are in grimoires/, not the loa-compositions registry; commit notes they "validate clean against v1.2"
381a9b7#223 2026-05-03 feat(shared): substrate-construct manifest schema + 11 tests. Extends Zod constructTypeSchema enum, adds substrateRuntimeSchema, substrateExecutableSchema, substrateRequirementSchema, substrateStreamEntrySchema, packManifestSchema gains optional runtime/executable/requirements/streams See secondary finding below

Validation

  • Pass: N/A — validate-strict.ts not executed (access blocked)
  • Fail: N/A

Per-failure classification

No AJV failures to classify — strict CI could not run.


Constructs-side schema state (verified)

composition.schema.json (runtime/)

  • Current declared version: 1.2
  • Last changelog entry: 2026-04-27 (governance closure PR) — no changes in the 7-day window
  • Schema layout stable: network/, runtime/, workflow/ subdirs + ~30 top-level schemas (from PR schemas(reorg): organize by concern — network/ runtime/ workflow/ #219 reorg, pre-window)
  • hivemind_labels.$ref still correctly points to https://loa.dev/hivemind/labels.schema.json (loa-hivemind) — unchanged
  • schema_version enum: ["1.0", "1.1", "1.2"] — no v1.3 bump attempted or needed from this schema's perspective

Conclusion: From the constructs side, composition.schema.json is frozen at v1.2 with no changes. v1.3 is not yet warranted based on constructs-side evidence alone. Whether loa-compositions has added YAMLs that require new fields remains unknown until the CI can be run.


Secondary finding — pack-manifest Zod/JSON-Schema pair drift (PR #223)

PR #223 (2026-05-03) added substrate-construct support to the Zod schema (TypeScript, pack-manifest.test.ts, 79 tests passing). The Zod additions include:

  • constructTypeSchema enum extended with "substrate-construct"
  • New optional schemas: substrateRuntimeSchema, substrateExecutableSchema, substrateRequirementSchema, substrateStreamEntrySchema, substrateStreamsSchema
  • packManifestSchema gains optional runtime, executable, requirements, streams
  • superRefine enforces executable + runtime required when type === 'substrate-construct'

However: The JSON Schema file at .claude/schemas/network/pack-manifest.schema.json was NOT updated. As of HEAD (381a9b7), the type field still reads:

"type": {
  "type": "string",
  "enum": ["skill-pack", "tool-pack", "codex", "template"],
  "description": "Construct archetype — determines scaffold template and validation rules"
}

The four new substrate fields (runtime, executable, requirements, streams) are absent from the JSON Schema entirely, and additionalProperties: false is set — meaning a substrate-construct manifest validated by AJV against the JSON Schema would fail on both the unknown type value and any of the four new fields.

Impact on composition validation: None directly. composition.schema.json uses construct slugs as free-form strings and does not reference pack-manifest.schema.json. Strict CI on loa-compositions validates composition YAMLs, not pack manifests.

Impact on pack-manifest consumers: Any consumer that validates manifest.json files using the JSON Schema (e.g., schema-validator.sh, constructs-loader.sh, the pre-dispatch validator) will reject valid substrate-construct manifests. The first instance is 0xHoneyJar/construct-lore-essay-grader (noted in PR #223 commit message).

Classification: Type-A (schema gap) in network/pack-manifest.schema.json — the Zod runtime is ahead of the JSON governance schema. Resolution requires a JSON Schema sync PR: extend the type enum and add the four optional substrate fields with additionalProperties: false removed or relaxed in the substrate block.


Schema v1.3 candidate fields (if Type-A drift surfaced)

The Type-A drift is in pack-manifest.schema.json (network), not composition.schema.json (runtime). No v1.3 composition bump is indicated from this check.

For pack-manifest.schema.json, the following additions are needed to sync with Zod:

type.enum += "substrate-construct"
properties.runtime       (substrateRuntimeSchema: engine, engine_version, node_version)
properties.executable    (substrateExecutableSchema: entry, export, protocol.input/output)
properties.requirements  (substrateRequirementSchema[]: Effect Tag + contract ref)
properties.streams       (substrateStreamsSchema: reads[] + writes[] of substrateStreamEntry)
superRefine logic        (enforce executable+runtime when type === substrate-construct)

Per VERSIONING.md these are all additive (new optional properties + new enum value) → minor bump under the versioning policy.


Notes

  1. Access scope is the primary blocker. The soak-check routine assumes a session with MCP access to all three repos or git clone capability. Document this as a prerequisite in the runbook.

  2. Two composition drafts (feel-image.yaml, collection-with-codex.yaml) exist in loa-constructs/grimoires/compositions/ (not in the loa-compositions registry). They reportedly pass v1.2 per commit chore(wip): operator skills + composition drafts + cycle tracks + arch specs #220. Once promoted to loa-compositions, they should be added to the registry count.

  3. PR feat(shared): substrate-construct manifest schema + 11 tests #223 Zod/JSON-Schema split is the only substantive schema-adjacent change in the window. It does not threaten the composition validation CI but does mean schema-validator.sh and JSON-Schema-based tooling will reject valid substrate-construct manifests. Recommend a follow-up sync PR before construct-lore-essay-grader or any other substrate-construct goes through the validator.

  4. Next run: ensure the executing session includes loa-compositions and loa-hivemind in its MCP allowlist, OR run from an environment with git clone access and bun installed. The scripts/validate-strict.ts entrypoint (loa-compositions#10) and recursive resolver (loa-compositions#12) should be intact.

Metadata

Metadata

Assignees

No one assigned

    Labels

    driftschemaSchema modification (JSON Schema / Zod / TypeScript)soak-check

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions