Problem
When a downstream repo declares an external in rivet.yaml like:
externals:
synth:
path: ../synth
prefix: synth
rivet validate happily loads synth's artifacts into the graph, but only the downstream repo's schemas are consulted when type-checking those artifacts. Result: every artifact whose type is defined in synth's schema but not in the downstream's schema raises an unknown artifact type ERROR.
In sigil today this produces 326 errors, all of the form:
ERROR: [synth:SWA-002] unknown artifact type 'sw-arch-component'
ERROR: [synth:VG-005] unknown artifact type 'system-req'
ERROR: [synth:E2E-VER-009] unknown artifact type 'sys-verification'
ERROR: [synth:CC-007] unknown artifact type 'sw-req'
...
The artifacts are well-formed in synth's own validation; they only break when sigil tries to type-check them against sigil's schema set (common, dev, stpa, stpa-sec, cybersecurity).
Impact
The 326 schema errors drown out real lifecycle issues in the downstream repo (sigil currently has 54 lifecycle coverage gaps and 41 warnings — these are buried in the noise). rivet validate becomes a wall of red rather than a steering instrument.
Proposed behavior
When loading an external, also load that external's schemas-path (or its declared schema files) into the type-check namespace, scoped to artifacts that originate from that external. Concretely:
- Resolve the external's own
rivet.yaml and read its schemas-path / schemas list.
- Register those schema types under the external's
prefix (e.g. synth:system-req is a known type, but does not collide with downstream's own system-req if it exists).
- Type-check
synth:-prefixed artifacts against synth's schemas, not the downstream's.
If an external's rivet.yaml cannot be located (or it doesn't have one), fall back to a permissive mode that demotes unknown artifact type from ERROR to INFO for externally-prefixed artifacts.
Alternatives considered
- Vendor schemas into the downstream repo — defeats the purpose of externals; creates drift.
- Add the missing types to the downstream schema — same drift problem, plus pollutes the downstream's type namespace with concepts it doesn't own.
- Demote externally-scoped errors globally — loses signal when an external genuinely has malformed artifacts.
Repro
# In sigil (current main), with synth checked out at ../synth:
rivet validate
# Result: FAIL (326 errors, 41 warnings, 114 broken cross-refs)
# All 326 errors are 'synth:* unknown artifact type ...'
Sigil version: rivet 0.4.3 (2d1a16b feat/agent-pipelines-foundation 2026-04-24).
Related
- pulseengine/sigil — most-affected downstream; this issue is filed off a hygiene pass there.
Problem
When a downstream repo declares an external in
rivet.yamllike:rivet validatehappily loads synth's artifacts into the graph, but only the downstream repo's schemas are consulted when type-checking those artifacts. Result: every artifact whosetypeis defined in synth's schema but not in the downstream's schema raises anunknown artifact typeERROR.In sigil today this produces 326 errors, all of the form:
The artifacts are well-formed in synth's own validation; they only break when sigil tries to type-check them against sigil's schema set (
common,dev,stpa,stpa-sec,cybersecurity).Impact
The 326 schema errors drown out real lifecycle issues in the downstream repo (sigil currently has 54 lifecycle coverage gaps and 41 warnings — these are buried in the noise).
rivet validatebecomes a wall of red rather than a steering instrument.Proposed behavior
When loading an external, also load that external's
schemas-path(or its declared schema files) into the type-check namespace, scoped to artifacts that originate from that external. Concretely:rivet.yamland read itsschemas-path/schemaslist.prefix(e.g.synth:system-reqis a known type, but does not collide with downstream's ownsystem-reqif it exists).synth:-prefixed artifacts against synth's schemas, not the downstream's.If an external's
rivet.yamlcannot be located (or it doesn't have one), fall back to a permissive mode that demotesunknown artifact typefrom ERROR to INFO for externally-prefixed artifacts.Alternatives considered
Repro
Sigil version: rivet 0.4.3 (2d1a16b feat/agent-pipelines-foundation 2026-04-24).
Related