Problem
Path Contract v1 (#357, merged) makes this repo the owner of the path grammar, with 58 language-neutral fixtures in contract/fixtures/. Phase 2 consumers (cloud, relayfile-cloud, relayauth, relayfile-adapters) are supposed to conform to those fixtures rather than reimplement the rule.
They currently cannot. contract/ sits at the repo root, outside every published npm package — @relayfile/client, @relayfile/core, and the rest all exclude it via their files lists. So a TS consumer has no way to import the corpus.
The practical consequence today: cloud has a CI gate (cloud#2732) that hand-mirrors the grammar in a local script. That is precisely what cloud's own source-of-truth rule forbids, and the script header already commits to deleting itself once the fixtures are consumable. Every other Phase 2 consumer faces the same choice — hand-mirror or skip the gate — and hand-maintained agreement is the exact drift mechanism that produced cloud#2297 in the first place.
Ask
Publish contract/fixtures/*.json (and ideally the reference scopePathValid / scopePathMountRoot semantics as data) in a consumable package. Either:
- add
contract/ to an existing package's files (e.g. @relayfile/core), or
- a dedicated
@relayfile/contract package — cleaner, since the corpus is language-neutral and has no runtime dependency on the client or core.
Versioned, so a consumer can pin a contract version and a bump is a visible, reviewable event rather than silent drift.
Why it is worth doing now rather than later
The contract only functions as a contract if the implementations that must satisfy it can execute it in their own CI. Until then it is a document that one repo tests against itself, and the other four keep their private theories of what a path means — which is the condition the whole stabilization program exists to end.
Once shipped, cloud#2732's local grammar rule gets deleted and replaced by fixture consumption; the other consumers can gate the same way.
Related: cloud#2738 (Phase 2 divergence map), cloud/specs/relayfile-path-contract-stabilization.md, cloud#2732.
Problem
Path Contract v1 (#357, merged) makes this repo the owner of the path grammar, with 58 language-neutral fixtures in
contract/fixtures/. Phase 2 consumers (cloud,relayfile-cloud,relayauth,relayfile-adapters) are supposed to conform to those fixtures rather than reimplement the rule.They currently cannot.
contract/sits at the repo root, outside every published npm package —@relayfile/client,@relayfile/core, and the rest all exclude it via theirfileslists. So a TS consumer has no way to import the corpus.The practical consequence today:
cloudhas a CI gate (cloud#2732) that hand-mirrors the grammar in a local script. That is precisely what cloud's own source-of-truth rule forbids, and the script header already commits to deleting itself once the fixtures are consumable. Every other Phase 2 consumer faces the same choice — hand-mirror or skip the gate — and hand-maintained agreement is the exact drift mechanism that produced cloud#2297 in the first place.Ask
Publish
contract/fixtures/*.json(and ideally the referencescopePathValid/scopePathMountRootsemantics as data) in a consumable package. Either:contract/to an existing package'sfiles(e.g.@relayfile/core), or@relayfile/contractpackage — cleaner, since the corpus is language-neutral and has no runtime dependency on the client or core.Versioned, so a consumer can pin a contract version and a bump is a visible, reviewable event rather than silent drift.
Why it is worth doing now rather than later
The contract only functions as a contract if the implementations that must satisfy it can execute it in their own CI. Until then it is a document that one repo tests against itself, and the other four keep their private theories of what a path means — which is the condition the whole stabilization program exists to end.
Once shipped, cloud#2732's local grammar rule gets deleted and replaced by fixture consumption; the other consumers can gate the same way.
Related: cloud#2738 (Phase 2 divergence map), cloud/specs/relayfile-path-contract-stabilization.md, cloud#2732.