The project's own renames never reached the design docs: nylon-ring vs fload, thefera vs the-fera, and a dangling LATTICE.md
Источник:
dev/fera-research/docs/oc1/012-naming-renames-never-propagated.md(read-only; сгенерировано scripts/sync-docs.mjs)
The project’s own renames never reached the design docs: nylon-ring vs fload, thefera vs the-fera, and a dangling LATTICE.md
Section titled “The project’s own renames never reached the design docs: nylon-ring vs fload, thefera vs the-fera, and a dangling LATTICE.md”- kind: problem
- area: modules
- evidence:
- The rename decision —
NAMING-UX.md:42: “fload— the nylon-ring fork (module runtime, OQ-024 fork intent)”;NAMING-UX.md:46listsfloadas a repo name;OQ.md:528gets the split right: “fload— nylon-ring fork (module runtime; OQ-024 fork intent)”. - The rename never happened in the corpus.
nylon-ringappears 20+ times across normative text:ADR.md:19,:49,:135,:240;TECHSPEC.md:31-39,:187,:207,:267,:301,:461;QA.md:17,:130;RFC.md:65,:157;OQ.md:17,:746,:834,:874;FUTURE-CHECKS.md:116.floadappears in exactly two places, both of which are the naming records themselves (NAMING-UX.md:42,46andOQ.md:528). - The rule that would prevent it is scoped but never defined.
NAMING-UX.md:53-55: “short, poetic-sounding names in the Rust-ecosystem tradition (serde,tokio,hyper) preferred over literal/descriptive (rustcalltg-style)” — qualified “for anything intended to have its own identity”. That qualifier is never defined, so the same rule both mandates (mikkajfor the milli fork,grmrsfor grammers) and exempts (intra-repo module names likestorage-sanakirja) names. - Corpus violates it in both directions:
mikkaj(milli fork,NAMING-UX.md:40-41,47) vs corpus “milli” atADR.md:366,TECHSPEC.md:23,:32,:145, and the directory/search-milli/(TECHSPEC.md:32).grmrs(grammers fork,NAMING-UX.md:44-45,47) vsgrammers-clientatTECHSPEC.md:50,TECHSPEC.md:20— a maximally descriptive name, exactly what R2 disfavours.- A rejected name is one character away from a live one: rejected
srch-milli(NAMING-UX.md:41) vs live/search-milli/(TECHSPEC.md:32). Nothing forbids rejected names from reappearing.
- Org name conflict.
NAMING-UX.md:46“Repo names in thetheferaorg”;OQ.md:523“Org name:thefera” — vsREADME.md:4,:9,:36which usethe-fera(github.com/the-fera/fera,https://github.com/the-fera). Two spellings; the hyphenated one is in every working URL. - Dangling file reference.
NAMING-UX.md:31“spec draft lives atcontext/LATTICE.md” andOQ.md:437“spec draft exists —context/LATTICE.md” —context/contains 15 files andLATTICE.mddoes not exist.README.md:35-37says the opposite (“Lattice’s container spec lives in its own repo … a standalone project”). - Same rule violation, structural variant:
ADR.md:700names the optional decoderffmpeg-decoder;TECHSPEC.md:38names the directory/media-decoder-ffmpeg/;TECHSPEC.md:186calls it “anffmpeg-next-backed decoder” — three names, and none matches themedia-decoder-*sibling pattern atTECHSPEC.md:37. - NAMING-UX is a decision log, not a normative spec — so its rules do
not bind. No ADR cites it (the single inbound hit,
FUTURE-CHECKS.md:4, is a disclaimer). Every inbound reference points at a log entry (OQ.md:342,:917,:934), never at a rule. Its own status language is hedged:NAMING-UX.md:105“direction chosen, no concrete artwork yet”;:132-141“Still open”;:181-183§3 is “Loose principles … that should inform UX decisions later”. NAMING-UX.md:134and:163-165still describe “the three-axis modularity (Engine/Style/Feature)” and a “Style-module-per-OS concept (ADR-009)” — both superseded byADR.md:227-231/:282-285(four axes; Style is data). See my finding 018.- Unsourced hard numbers presented as fact:
NAMING-UX.md:16-22(“52M+ downloads”) and:97-98(“~75K YT / ~475K TT”) — no source, date or method.
- The rename decision —
- severity: mid
Суть / Substance
Section titled “Суть / Substance”NAMING-UX.md is where the project records what things are called, and
the corpus has diverged from it everywhere — but because the doc has no
normative force (nothing cites it as a rule), the divergence has never
surfaced as an error. The concrete consequences are practical, not
aesthetic:
- An implementer cannot tell which name to use.
nylon-ringappears in every layout section, every ADR and every QA gate;floadappears only in the naming record. Any agent picking up “implement the module boundary” will usenylon-ring— the doc will tell them they got the name wrong, and they will have no way to know which artifact the name refers to (crate? repo? upstream project?).NAMING-UX.md:42names the same thing two ways on one line. - Fork repo names are already decided and already wrong.
grmrs/mikkaj/floadare named inOQ.md:523-531as the repos to create;TECHSPEC.md:20-32writes/protocol/ — grammers wrapperand/search-milli/. My finding 011 shows the protocol fork is a mandated decision whose crate path is still upstream’s name — so the rename and the decision are un-applied together. - A rejected name is live.
srch-millirejected,/search-milli/shipped in the layout. With no rule against reuse, this recurs. - The org name is ambiguous in URLs.
thefera(2 docs) vsthe-fera(README, i.e. the actual GitHub URLs). Anything scripted against the wrong one 404s. context/LATTICE.mddoes not exist but two docs point at it, whileREADME.md:35-37says the spec lives in another repo. Anyone implementing OQ-013’s container format follows a dead path.
The meta-defect: README.md:41-45 defines a resolution protocol for
decisions (OQ → ADR, with a marker) but there is no equivalent for
names, so renames never propagate. That is why the highest-visibility
rename in the project (the module runtime) is invisible in 20+ places.
Варианты решения (tradeoffs)
Section titled “Варианты решения (tradeoffs)”- (A) Decide per-name: canonical name + layer, then apply corpus-wide.
e.g. “
fload= repo,nylon-ring= crate name, upstream project = nylon-ring; docs use the crate name;OQ.md:528’s split is canonical.” Cheap, mechanical, no new concepts. - (B) Rename the crate to match the repo (
floadeverywhere). Maximally consistent with R2; costs a rename across every ADR and QA gate for no functional gain, and “fload” is obscure outside the project. - (C) Retire NAMING-UX’s rule status — declare it a historical log and
let
ADR.mdown all names. Cleanest logically, but loses the rules (R2/R3/R4 are genuinely useful) and leaves the fork names unowned. - (D) Leave it. Reject: 20+ sites of drift and a dead file reference.
Предлагаемое решение
Section titled “Предлагаемое решение”(A), plus a mechanical guard.
- Publish a name table (in
NAMING-UX.md§1, which already is the place names are recorded) with one row per thing and columns for concept / repo / crate / dir, sofload | nylon-ring | …is recorded as a deliberate mapping rather than a contradiction. Add explicit “rejected names — do not reuse” rows (srch-milli,nya-runtime). - Apply the table to the 20+
nylon-ringsites (or, if the author prefers, rename the crate once in a single ADR addendum and let a follow-up sweep do the corpus). Same for/search-milli/vsmikkajand/protocol/ — grammers wrappervsgrmrs(see finding 011). - Fix the org name — one spelling everywhere;
the-fera(it is what the URLs use). - Fix or delete the
context/LATTICE.mdreferences (NAMING-UX.md:31,OQ.md:437) — point at the lattice repo perREADME.md:35-37. - Add the two missing rules so future renames propagate:
(a) “ADR addenda supersede downstream sections of RFC/TECHSPEC/QA”
(this is the class behind findings 001, 002, 008, 018 — the same fix
keeps recurring); (b) “R2 applies to repos/products with their own
identity, not to intra-repo module directory names” — which stops
storage-sanakirja/calls-tgcallsfrom reading as violations. - Cheap mechanical guard: a script that greps every name in the
published table and fails on undocumented variants, plus a link-check
for
context/*.mdintra-repo references (catchesLATTICE.md). - Low priority but cheap: source or date-stamp the
52M+ downloads/~75K YT / ~475K TTfigures (NAMING-UX.md:16-22,:97-98), and fix “power-consumment” (:98).