Skip to content

scientific(topic): bind fitted topic-basis identity to owner-issued reference fit #666

Open

Description

@seonghobae

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

Keep #639 Draft. No source copy, detached digest promotion, force push, destructive rebase, self-approval, or gate weakening.

Refs #638 #639 #658 #663 #665 ADR 0012.

Activity

  1. seonghobae commented on Sep 22, 2026

    @seonghobae
    ContributorAuthor

    Source-level #666 lineage is now ordinary-forward on #639: API-absence RED 0cee03261b6672bab84cf7cf5014ca308b98aa30 → public ReferenceTopicFit authority + crate-private detached validator 62d80186c2b5da404171ba64ac504d6a3b95a63d → integration consumer moved to from_bound_fit and detached hostile cases kept owner-internal 5984ac0959886558ee6b2966cda2d87b3dd664ee → CHANGELOG currentization 40004fe38d39996cc404d3177bce40829498b6b7.

    The public basis constructor now derives vocabulary width from the admitted input retained inside ReferenceTopicFit; no public ReferenceTopicModel + usize constructor 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions