Appearance
Decision index
Every architectural decision in this repository, generated from docs/adr/. 88 ADRs, 180 numbered decisions, 6 superseded.
An accepted ADR is binding. Contradicting one requires a new ADR that supersedes it — never an edit to the old file, and never a quiet reinterpretation. Ids are unique and permanent: they are never renumbered and never reused, so a gap in the sequence is a tombstone rather than a mistake.
Accepted
| ADR | Decision | Ids | Status |
|---|---|---|---|
| 0001 | Academic deliverable with a production-shaped core | D-01 | Accepted |
| 0002 | Safety-critical content is extractive; only non-critical content is generated | D-02, D-03 | Accepted · amended by ADR-0036, ADR-0041 |
| 0005 | Safety content is offline-first; only the chatbot requires a network | D-06 | Accepted · amended by ADR-0040 |
| 0006 | An information tool, with escalation ahead of procedure | D-07, D-08 | Accepted · amended by ADR-0041, ADR-0049 |
| 0007 | Anonymous-first — no safety capability sits behind an account | D-09 | Accepted · amended by ADR-0029 |
| 0008 | First Aid is the missing screen, sourced from SDS Section 4 | D-10 | Accepted |
| 0009 | Thai safety text is curated, never machine-translated at runtime | D-11, D-12 | Accepted · amended by ADR-0027 |
| 0010 | The poster's QR code is decorative; the poster is the complete source | D-13 | Accepted |
| 0011 | The corpus is the case-study plant's own SDS, ingested as files | D-14, D-15 | Accepted — supersedes ADR-0003 · amended by ADR-0016, ADR-0034 |
| 0012 | "AI summarisation" means selection and structure, never rewriting | D-16, D-17 | Accepted — clarifies ADR-0002, which stands · amended by ADR-0037 |
| 0013 | A Chemical Record is keyed on its SDS document, not on a substance | D-18, D-19 | Accepted — amends ADR-0004, which otherwise stands · amended by ADR-0024 |
| 0014 | poster.pdf is the authoritative source; the first poster is history | D-20, D-21, D-22 | Accepted |
| 0016 | A proxy corpus develops the pipeline; it is never the delivered corpus | D-28, D-29 | Accepted — amends ADR-0011, which stands |
| 0017 | Functional acceptance now; performance targets only against a measured baseline | D-30, D-31, D-32 | Accepted |
| 0018 | Corrections found by adversarial review of stages 0 and 1 | D-27, D-33, D-34, D-35 | Accepted |
| 0020 | The prototype is a web application on the work-permit stack | D-37, D-38, D-39, D-40, D-41, D-42 | Accepted — supersedes ADR-0019 |
| 0021 | D-23, D-24 and D-25 were never issued — tombstone | D-43 | Accepted |
| 0022 | Restrictions are reconciled across the whole document, at Curation time | D-44, D-49, D-50 | Accepted — supersedes ADR-0015 |
| 0023 | Conflicting Chemical Records are never merged; the product in hand governs | D-45, D-46 | Accepted |
| 0024 | An SDS with no revision date is admitted, and the absence is shown | D-51 | Accepted — amends ADR-0013 |
| 0025 | Generic PPE text is displayed as generic, and the glossary rule is softened | D-52, D-53 | Accepted |
| 0026 | Spill Response is branched, and the branch question is the escalation gate | D-54, D-55 | Accepted · amended by ADR-0041 |
| 0027 | The Thai-SDS preference stands; its text layer is never trusted | D-56, D-57 | Accepted — amends ADR-0009 |
| 0028 | Curation costs roughly a day per document, and the measured figure is a floor | D-58, D-59 | Accepted — satisfies D-32 · amended by ADR-0034 |
| 0029 | The prototype has no accounts, no sync and no favourites | D-60, D-61 | Accepted — amends ADR-0007 |
| 0030 | Identification has three peer routes, and The Plant can print QR labels | D-62, D-63, D-64 | Accepted — supersedes ADR-0004 · amended by ADR-0076 |
| 0031 | The chatbot routes to a Source Span; a cloud LLM reads the question, never the SDS | D-65, D-66, D-67, D-68, D-69, D-70, D-71 | Accepted — supersedes nothing. ADR-0002 and ADR-0012 stand in full. · amended by ADR-0033, ADR-0036, ADR-0039, ADR-0042, ADR-0043, ADR-0046 |
| 0032 | A missing Corpus is its own answer, and it is never Not Stated | D-72, D-73, D-74 | Accepted · amended by ADR-0036 |
| 0033 | Query Intent runs on Gemini Flash's paid tier, and zero retention was not available | D-75, D-76, D-77, D-78 | Accepted — amends ADR-0031, which stands · amended by ADR-0043, ADR-0055 |
| 0034 | The Corpus is sized to one production area, not to a document count | D-79, D-80 | Accepted — amends ADR-0011 and ADR-0028, both of which stand · amended by ADR-0054 |
| 0035 | A superseded finding says so on its own page, and a gate enforces it | D-81, D-82, D-83, D-84 | Accepted |
| 0036 | There are four reasons the app cannot answer, and it says which one | D-85, D-86, D-87, D-88, D-89 | Accepted — amends ADR-0002, ADR-0031 and ADR-0032, all of which stand |
| 0037 | Explaining a term is curated, not generated — and the app now displays no generated text at all | D-90, D-91 | Accepted — amends ADR-0012, which stands |
| 0038 | D-47 and D-48 were never issued — second tombstone | D-92 | Accepted |
| 0039 | ADR-0031 cites a deleted study objective; its ruling stands and the observation moves | D-93 | Accepted — amends ADR-0031, which stands |
| 0040 | No user-facing surface may require a network; a network may only improve one | D-94 | Accepted — amends ADR-0005, which stands |
| 0041 | Escalation text is curated and has an author, and the branch condition is not the escalation gate | D-95, D-96, D-97 | Accepted — amends ADR-0002, ADR-0006 and ADR-0026, all of which stand · amended by ADR-0042, ADR-0049 |
| 0042 | Escalation ships with the app shell and is reachable everywhere; the trigger only saves a tap | D-98, D-99, D-100 | Accepted — amends ADR-0031 and ADR-0041, both of which stand · amended by ADR-0049 |
| 0043 | Query Intent is advisory, and the spend cap is the control | D-101, D-102, D-103 | Accepted — amends ADR-0031 and ADR-0033, both of which stand |
| 0044 | A Coverage row records what drove a decision, not that the author read the research | D-104 | Accepted |
| 0045 | "Part of the chosen stack" and "installed today" are different claims, and one of them is checkable | D-105 | Accepted |
| 0046 | A retrieval miss shows the field it failed to match, and never claims the document is silent | D-106, D-107 | Accepted — amends ADR-0031, which stands |
| 0047 | A missing PPE material is data, not prose, and a curated field never displaces its span | D-108, D-109 | Accepted |
| 0048 | Curation runs only where nothing is served, renders pages in the curator's browser, and leaves no orphaned file | D-110, D-111, D-112 | Accepted |
| 0049 | Until a site authority signs it, the Curated Escalation is the hotline alone, and the trigger fires on a person rather than a topic | D-113, D-114, D-115 | Accepted — amends ADR-0006, ADR-0041 and ADR-0042, all of which stand |
| 0050 | A spill branch may state no condition, and the store records that absence as null | D-116 | Accepted |
| 0051 | A QR label carries csa:chemical-record/ and a key that survives the database that issued it | D-117, D-118 | Accepted |
| 0052 | A document is verified whole before anything is selected from it, identity comes from its Sds, and its Sections are labels created at admission | D-119, D-120, D-121 | Accepted |
| 0053 | A published snapshot says what it shipped, in the shape the device stores | D-122, D-123, D-124 | Accepted · amended by ADR-0056 |
| 0054 | The Study Area is the production area that uses น้ำยาล้างชิ้นงาน | D-125 | Accepted — amends ADR-0034, which stands |
| 0055 | The Query Intent endpoint is not built until the Study Area's Corpus exists | D-126 | Accepted — amends ADR-0033, which stands |
| 0056 | A published version is the payload the gate passed, stored and served as it is | D-127 | Accepted — amends ADR-0053, which stands |
| 0057 | A server with no published snapshot refuses, and a device takes its sentinel from the payload | D-128, D-129 | Accepted · amended by ADR-0075 |
| 0058 | A stored copy is never deleted through the API | D-130 | Accepted |
| 0060 | The sixteen Section Headings are a fixed Thai/English pair, held once and gated across both repositories | D-133, D-134 | Accepted · amended by ADR-0075 |
| 0062 | A curation refusal names the rule that fired | D-136 | Accepted · amended by ADR-0075 |
| 0063 | The application repositories are gitlinks under app/, and a checkout reaches the workspace two levels up | D-137 | Accepted |
| 0064 | The Standing Statement is stated on first run by a blocking First Run Notice | D-138, D-139, D-140 | Accepted · amended by ADR-0070 |
| 0065 | The Boot Splash exists, and what may appear on it is a closed set | D-141 | Accepted |
| 0066 | The design extract binds colour, spacing and surface treatment, and nothing else | D-142 | Accepted · amended by ADR-0070, ADR-0078 |
| 0067 | A selection carries nothing onto the next one | D-143 | Accepted |
| 0068 | The Reconciliation gaps read says why the list is empty | D-144 | Accepted · amended by ADR-0069, ADR-0071, ADR-0075 |
| 0069 | The gaps read carries a judged count, so an empty list cannot claim a judgement that never happened | D-145 | Accepted — amends ADR-0068, which stands · amended by ADR-0075 |
| 0070 | Chrome overlaps Conversational Content rather than being part of it, and the design extract is cited by locator | D-146, D-147 | Accepted — amends ADR-0064 and ADR-0066 |
| 0071 | The gaps read's coverage union and its precedence are a contract, not an implementation detail | D-148 | Accepted — amends ADR-0068, which stands |
| 0072 | A Section reaches the device as a number and a name, not as one rendered string | D-149 | Accepted |
| 0073 | Authoring an explanation for a term that already has one is refused | D-150 | Accepted — supersedes ADR-0061 |
| 0074 | A document records its page count where one can be read, the count is nullable, and withdrawing a verification stays refused | D-151, D-152 | Accepted — supersedes ADR-0059 |
| 0075 | Corrections a cross-model grill found in the 2026-09-20 rulings | D-153 | Accepted — amends ADR-0057, ADR-0060, ADR-0062, ADR-0068 and ADR-0069, all of which stand |
| 0076 | Home is six actions, and an Identification route that is not built is absent rather than disabled | D-154, D-155 | Accepted — amends ADR-0030, which stands |
| 0077 | Chrome is three parts, and the alarm colour stays spent on escalation | D-156, D-157 | Accepted |
| 0078 | Typography and motion join the list the design extract binds | D-158, D-159 | Accepted — amends ADR-0066, which stands |
| 0079 | Every interactive control comes from one ported component set | D-160 | Accepted |
| 0080 | The verification surface states what the server states, and a refused write never reads as an unverified page | D-161, D-162, D-163, D-164, D-165 | Accepted |
| 0081 | A Handler can open the original document over the network, and no surface waits for it | D-166 | Accepted |
| 0082 | Every published version is listed, and what it shipped is read from its own payload | D-167 | Accepted |
| 0083 | The Chemical Record screen tabs its reference fields, and emergency content stays flat | D-168 | Accepted |
| 0084 | A curated selection is superseded or retracted, never edited | D-169, D-170, D-171, D-172, D-173, D-174, D-175, D-176, D-177 | Accepted · amended by ADR-0085 |
| 0085 | Restating a span the replacement asked to keep is its own coded refusal | D-178 | Accepted — amends ADR-0084, which stands |
| 0086 | A Spill Response branch is a container, and its stated condition is corrected by an act of its own | D-179, D-180, D-181 | Accepted · amended by ADR-0087 |
| 0087 | A branch condition has two states, because keeping it is a correction that corrected nothing | D-182, D-183 | Accepted — amends ADR-0086, which stands |
| 0088 | The Curator's record read serves live rows, and corrected ones are a count rather than content | D-184, D-185 | Accepted |
Superseded
Kept and listed, not deleted. A superseded ADR still holds the argument that was made, and its Status line names the document that replaced it. Reading one without noticing it is dead is the failure scripts/adr-status-check.sh exists to prevent.
| ADR | Decision | Ids | Status |
|---|---|---|---|
| 0003 | The corpus is curated manufacturer-published SDS PDFs | D-04 | Superseded by ADR-0011 — do not follow this ruling |
| 0004 | Chemical identification is OCR on the CAS number | D-05 | Superseded by ADR-0030 — read order preserved, ranking replaced · amended by ADR-0013 |
| 0015 | Extractive selection must never drop a restriction | D-26 | Superseded by ADR-0022 — premise upheld, mechanism replaced |
| 0019 | The prototype targets native Android only | D-36 | Superseded by ADR-0020 — do not follow this ruling |
| 0059 | A document records its page count, and withdrawing a verification stays refused | D-131, D-132 | Superseded by ADR-0074 — do not follow this ruling; the page count is nullable, and ADR-0074 carries this ADR's amendment of ADR-0052 forward |
| 0061 | A Curated Explanation is replaced in place, never retired | D-135 | Superseded by ADR-0073 — do not follow this ruling; the second authoring is refused |