Repository navigation
Description
Finding
#663 added FittedTopicBasisIdentity, but its public constructor still accepts an arbitrary &ReferenceTopicModel plus a caller-supplied vocabulary width. ReferenceTopicModel is intentionally inspectable/mutable in tests, so a downstream caller can manufacture a fit-local basis identity from a detached or hand-mutated model that was not minted together with the admitted estimator input/configuration.
#665 now provides the correct owner-issued nominal aggregate, ReferenceTopicFit, which can only be created by executing the CPU reference estimator over the retained ReferenceTopicInput and ReferenceTopicModelConfig. The fitted-topic basis public boundary should consume that aggregate rather than a detached model/width pair.
This is not Evidence/source provenance (#658) and does not authorize release projection by itself. It is a numerical-owner authority repair required before #663 can claim owner-issued topic coordinates.
Required RED
Use an actual converged ReferenceTopicFit and require a public FittedTopicBasisIdentity::from_bound_fit(&fit) path. The existing detached from_model(model, vocabulary_size) path must cease to be public API; malformed/model-only tests may remain inside the owner module as private validation tests.
Positive acceptance:
- repeated projection from the same owner-issued fit is bit/digest deterministic;
- topic row identities remain content-bound and the enclosing basis remains order-sensitive;
- the vocabulary width comes from the retained admitted input, not a caller integer.
Negative/authority acceptance:
- no public constructor accepts a detached
ReferenceTopicModel+ vocabulary width; - malformed and duplicate fitted-topic rows still fail closed inside owner tests;
- no topic reordering, semantic naming, LLM interpretation, source/vocabulary provenance claim, or covariance transformation is introduced.
Boundary
- scientific(topic): bind reference fit results to the admitted estimator input #665 owns fit ↔ admitted-input/config integrity.
- release(topic): bind topic-index coordinates to the fitted topic basis #663 owns release-level topic-basis coordinate binding.
- release(provenance): bind topic-lineage input to owner-issued source snapshot evidence #658/feat(evidence): own immutable source snapshot receipts #527 own source/vocabulary provenance.
- This issue owns only the fit-local public constructor authority for
FittedTopicBasisIdentity.
Keep #639 Draft. No source copy, detached digest promotion, force push, destructive rebase, self-approval, or gate weakening.
Activity
test(topic): require owner-issued topic basis identity (#666)
fix(topic): bind basis identity to owner-issued fit (#666)
test(topic): consume bound basis identity contract (#666)
docs(changelog): record owner-issued basis authority (#666)
seonghobae commentedon Sep 22, 2026
Source-level #666 lineage is now ordinary-forward on #639: API-absence RED
0cee03261b6672bab84cf7cf5014ca308b98aa30→ publicReferenceTopicFitauthority + crate-private detached validator62d80186c2b5da404171ba64ac504d6a3b95a63d→ integration consumer moved tofrom_bound_fitand detached hostile cases kept owner-internal5984ac0959886558ee6b2966cda2d87b3dd664ee→ CHANGELOG currentization40004fe38d39996cc404d3177bce40829498b6b7.The public basis constructor now derives vocabulary width from the admitted input retained inside
ReferenceTopicFit; no publicReferenceTopicModel + usizeconstructor remains. Per-topic content identity and order-sensitive basis identity are unchanged. This is still fit-local numerical integrity only; #658/#527 remains the source/vocabulary provenance prerequisite before #663 can project durable release topic coordinates.Exact-head hosted runs for
40004fe...are queued, so this comment does not claim hosted GREEN, coverage, review, Ready, or merge.