Constraints Ledger
15 binding constraints. Source: UFTAGP-SPEC-001.
The project makes no claims about enforcement, implementation, or outcome. Doctrine describes what counts as conserving or violating intent — it does not prescribe what should happen as a result.
The classification colors label-conserving, label-non-conserving, and label-refusal are reserved exclusively for ClassificationLabel component output. No other component, page, or UI element may use these color values.
Sealed glossary terms are non-expandable. Tooltips display exactly: the term, verbatim definition, source artifact ID, and section reference. No editorial additions, cross-references, or related terms are permitted.
All artifact IDs must conform to the pattern UFTAGP-[A-Z]{2,4}-\d{3}. IDs that do not match this pattern are invalid and must not be rendered, stored, or transmitted.
corpus-bundle.json must be loaded via static import only. File system reads (fs.readFileSync) are prohibited. Dynamic import is permitted only where static import is architecturally infeasible.
Refusal (Terminal) is a terminal classification state. No retry button, rephrase suggestion, or alternative path may be presented after a terminal refusal. The terminality statement is required output.
Raw ORCID iDs are hashed immediately on receipt using SHA-256 + SESSION_SECRET and then discarded. The raw iD must not appear in any database, log, session, or intermediate variable beyond the hashing operation itself.
Vote eligibility is evaluated at ORCID authentication time and stored as a boolean in the encrypted session cookie. Eligibility must not be re-evaluated at vote time because the raw ORCID iD is unavailable at that point.
The vote_count field is maintained exclusively by a Supabase database trigger. Application routes must not update vote_count directly. Duplicate detection is governed by the DB UNIQUE constraint, not application logic.
The researcher contribution badge text is "MCR on File" everywhere it appears in the interface. The phrase "Verified Logic" must not appear in any component, page, label, or tooltip in the UFTAGP codebase.
All public-facing copy, including the About page, must not contain outcome claims, implementation prescriptions, or enforcement assertions. The project describes doctrine — it does not prescribe action.
Vote counts must be visible on all community submissions regardless of value, including zero. Submissions with zero votes must not be hidden, filtered, visually distinguished, or ranked below submissions with positive vote counts on grounds of their zero value alone.
The UFTAGP codebase must contain no references to SpineGraph, the Davis Canon COM pipeline, or any other project sharing infrastructure. Environment variables, types, and constants must be scoped exclusively to UFTAGP.
Classification Engine output labels (Conserving, Non-Conserving, Refusal (Terminal)) must not be applied to community submissions. Community submissions display researcher-tagged transformation_class as plain text in mid-grey on id-bg only.
Community submissions are sorted by vote_count DESC. classificationCount is secondary display metadata. It must not influence, modify, or substitute for vote_count in any sort, ranking, or ordering operation.