Tools · CLIN 0002 Proposal & capture
Acronym Table Builder
PlannedFind every acronym in a draft and produce the definition table reviewers expect.
This tool is planned. There is nothing to open yet. What follows is the plan, and it can change before the tool ships. The guide below covers the same job by hand in the meantime. Jump to the full specification.
What it will do
Paste a draft volume. The tool lists every acronym it finds, where each first appears and whether it is spelled out there. It flags acronyms that are defined and never used again, and acronyms used with two meanings. You write the definitions and the tool builds the table.
You bring
- The text of a draft proposal volume
You get
- An acronym table in alphabetical order
- The acronyms that are undefined, unused or used with two meanings
Built from
- The solicitation’s own instructions on acronym lists and page counts
Only material the government has officially released to the public. Where the rules live shows how to find and cite each one.
Do it by hand today
- Answer every requirement · Define the acronymsTurn a solicitation into a numbered list of requirements, a compliance matrix, an outline and a page budget, so nothing is missed.
True of every tool
- Free and open source.
- No paid tier, no ads, and the code is public.
- Runs in your browser.
- What you type or open is not sent anywhere.
- No tracking.
- No accounts, cookies or analytics.
- Shows its sources.
- Each result names the rule it rests on, so you can check it.
- Says what it does not do.
- It is an aid for your own work, not professional advice.
What happens to what you type shows how to confirm this yourself, and Check a tool’s answer is the method for verifying a result.
Want it sooner?
Requests decide what is built first. Say what you would use it for, and what you do by hand today.
Issues are public. Leave out real contract data, real rates and anything controlled. How to write a useful request.
Specification · draft
How it is meant to work, in detail
The inputs, the logic, the checks the tool has to pass and the worked examples it is tested against. It is a draft, and the tool is built from it, so it can change until the tool ships.
4 min readLast revised November 2026Source of this specification
Overview & Role#
The Acronym Table Builder (acronym-table-builder) belongs to CLIN 0002 — Proposal & capture in src/data/catalog.ts. It scans finished or near-final proposal draft text to find every acronym, verify first-use expansion, detect conflicting definitions or unused entries, and produce the clean definition table reviewers expect.
As noted in Answer every requirement, reviewers evaluate many proposals under tight timelines. An acronym table built from the finished text—rather than copied from an old template—ensures every term in the proposal is defined and nothing extraneous is listed.
| Attribute | Value |
|---|---|
| Tool Slug | acronym-table-builder |
| Catalog CLIN | 0002 — Proposal & capture |
| Stack Template | validator (local lexical scanner in Moldloft) |
| Runtime | 100% static browser-side HTML/CSS/JS (zero backend, zero runtime AI) |
| License | MIT |
Governing Regulations & Sources#
- FAR Part 15 & Section L Formatting Instructions: Many solicitations explicitly require an acronym list (either counted within or excluded from volume page limits) and require every acronym to be spelled out on first use.
- Section L Precedence: Whether an acronym list belongs in front matter, an appendix, or inline only is governed by Section L (Instructions, conditions, and notices to offerors) or FAR Part 12 Instructions to Offerors.
- Standard Federal & DoD Acronym Conventions: Bundles a read-only JSON dictionary of common public federal acquisition acronyms (e.g.,
FAR,DFARS,CLIN,COR,CO,PWS,SOW,SOO,RFP,RFQ,IFB,SAM,NAICS,PSC,CUI,NIST,CMMC,ATO,PoP) strictly as suggested defaults that the user can accept, edit, or override.
Inputs, Processing Logic & Outputs#
Inputs
| Field | Type | Constraints & Defaults |
|---|---|---|
draftText | Plain text or Markdown | Pasted volume text or local .txt/.md file read in browser memory. |
existingAcronymList | Optional CSV/text pairs (ACRONYM: Definition) | Used to detect defined-but-unused acronyms and pre-fill known project-specific terms. |
minLength | Integer (2–5) | Defaults to 2 (minimum uppercase characters to treat as an acronym). |
ignoreCommonUnits | Boolean | Defaults to true (excludes units/identifiers like US, ID, PM, AM, GB, MB, PDF unless defined inline). |
Deterministic Processing Logic
- Inline definition detection: Scans for explicit expansion patterns in the draft:
Full Term Name (ACRONYM)— e.g.,"Performance Work Statement (PWS)"ACRONYM (Full Term Name)— e.g.,"CUI (Controlled Unclassified Information)"
- Standalone acronym extraction: Matches uppercase/alphanumeric tokens (e.g.,
FAR,CMMC,ISO,800-171excluded as pure numeric,DoD,FedRAMPvia mixed-case allowlist) and records total occurrence count plus character/line index of first appearance. - First-use compliance check: Flags any acronym whose first appearance in
draftTextprecedes its first inline expansion, or which appears without any inline expansion in the draft. - Collision & orphan detection:
- Multi-meaning collision: Flags an acronym defined two different ways in the same draft (e.g.,
POdefined as bothProject OfficerandPurchase Order). - Defined-but-unused orphan: Flags entries present in
existingAcronymListthat appear zero times indraftText.
- Multi-meaning collision: Flags an acronym defined two different ways in the same draft (e.g.,
- Alphabetical normalization: Sorts unique acronyms case-insensitively (
A–Z) and formats a clean two-column table (Acronym,Definition).
Outputs
- Acronym Definition Table: Sorted table with
Acronym,Definition(editable inline),Occurrences,First Use Status(Defined at first use|Defined late|Undefined), andFlags(Collision,Unused). - QA Summary: Counts of unique acronyms, undefined acronyms, late-defined acronyms, collisions, and unused entries.
- Local Exports: Markdown table, CSV, and plain-text tab-separated exports for direct paste into Word, LibreOffice, or Markdown proposal drafts.
Clean-Room & 5-Condition QA Requirements#
- Browser-only execution: All regex scanning, dictionary lookup, and export formatting run in browser memory.
- Strict Content Security Policy (
connect-src 'self'): Enforcesdefault-src 'self'; connect-src 'self'; form-action 'none'. Draft proposal text never leaves the user's device. - Zero tracking or accounts: No accounts, analytics, cookies, or beacons. Any optional
localStoragestate is disclosed and paired with a Clear local data button. - Offline execution: All federal acronym suggestion dictionaries and parsing logic are bundled in the static repo and work without internet access.
- Worked examples, citations & scope limits: Verified with synthetic test vectors, cites FAR Part 15 / Section L conventions, includes an MIT
LICENSE, and notes that domain-specific acronyms absent from the bundled public dictionary require human confirmation so incorrect expansions are never silently inserted.
Worked Example & Verification#
Synthetic Input (draftText):
The Performance Work Statement (PWS) requires compliance with NIST SP 800-171.
The Contracting Officer (CO) will review the PWS deliverables.
Later, the CO acts as the Change Order (CO) approver, and the SLA applies.
Synthetic existingAcronymList: RFP: Request for Proposal
Expected Deterministic Output:
| Acronym | Definition | Occurrences | First-Use Status | Flags |
|---|---|---|---|---|
CO | Contracting Officer / Change Order | 3 | Defined at first use | Collision (2 distinct definitions) |
NIST | (Suggested: National Institute of Standards and Technology) | 1 | Undefined inline | Needs inline expansion |
PWS | Performance Work Statement | 2 | Defined at first use | OK |
RFP | Request for Proposal | 0 | — | Unused in draft |
SLA | (Suggested: Service Level Agreement) | 1 | Undefined inline | Needs inline expansion |
Verification assertions:
PWSis captured once with count2and statusDefined at first use.COtriggers a collision warning because"Contracting Officer (CO)"and"Change Order (CO)"both bind toCO.RFPtriggers anUnusedwarning because its occurrence count indraftTextis0.