Platform · J.1 How tools get made
The pipeline and its ten workers
DesignWhat each of the ten workers does, why none of them uses AI, how a case no rule covers is handled, and how the workers stay in step.
J.1.29 min readLast revised November 2026
Status: Design. A specification. It describes how the component is meant to work, not something you can use on this site today. What the labels mean.
On this page
The pipeline is ten small Go programs, from Trawl at stage 01 to Bellbuoy at stage 10, each in its own MIT-licensed repository and each with one job. Together they take an idea for a tool from first sighting to a listing in the catalog, and keep watching it afterward. This page describes each worker and the rules they share. Each name in the table links to that worker’s full specification, and the naming registry lists what each one used to be called.
The ten workers#
| Stage | Worker | Its job | Rules for particular cases |
|---|---|---|---|
| 01 | Trawl | Record a candidate once: clean its address, check for duplicates, give it an identifier | One for each source: sam-gov, github-issues, web-sweep, site-form |
| 02 | Sextant | Read the candidate’s public pages and write down what job it does | One for each kind of page: saas-marketing, gov-portal, agency-pdf, and particular vendors |
| 03 | Assay | Apply the five knockout gates, the 100-point rubric and the tie-breakers | One profile for each area of the catalog |
| 04 | Countersign | Hold the queue where the owner decides | None. The decision is a person’s |
| 05 | Waybill | Write the credit note and the specification the tool is built from | One profile for each kind of tool |
| 06 | Moldloft | Generate the tool’s own repository from the specification | Four templates: calculator, checklist, validator, decision-tree |
| 07 | Shakedown | Check the built tool against the five listing conditions | None. The checks are the same for every tool |
| 08 | Chartroom | Publish, link, merge or retire the catalog entry | None |
| 09 | Tidegauge | Watch regulations, live tools and linked tools for change | One for each source: federal-register, ecfr, nist-csrc, linked-tool-watch, live-catalog |
| 10 | Bellbuoy | Send approved edits, tasks and errors to the repository that owns them | One for each destination: internal-git, github-mirror, webhook-alert, portal-sse |
Finding and recording#
Trawl collects candidates from four places: public notices on SAM.gov, issues opened on GitHub, scheduled sweeps of public government and vendor sites, and the form on this site. Its job is to make sure each one is recorded exactly once.
Cleaning the address. The same tool is often reachable at several addresses. Before anything is saved, the address is put through fixed rules: the scheme and host are made lowercase, tracking and session parameters are removed along with any fragment, and trailing slashes and default file names are tidied so that equivalent addresses become one. Addresses that are not public, that point inside a private network or that need a login are refused.
Checking for a duplicate. A SHA-256 hash of the cleaned address is compared with the ones already recorded. If it matches, the sighting is noted against the existing record. If it is new, the candidate is given a permanent identifier of the form PA-0001 and passed on.
What intake never does. It does not create accounts on other sites, ask for sales demonstrations, get around a paywall or a CAPTCHA, ignore robots.txt, or accept controlled information or real bid figures.
Observing#
Sextant reads what a candidate says about itself in public and turns that into a structured record: the job it does, its inputs and outputs, whether it needs a login, whether it tracks its users, its license, its price model, the public rule it cites and the date it was looked at.
A small program first, a browser only when needed. Most public pages and documents can be read with a plain web request, by a program that needs about 30 MiB of memory. Only when a page is built entirely by scripts does the worker start a temporary browser to render it, and that browser is discarded as soon as the page has been read.
Public pages only. The worker reads what anyone can see. It does not sign up, start a trial, fill in a contact form, enter real data or get past a login. Where a page says something the worker cannot see for itself, the fact is recorded as Stated instead of Seen. Anything else is Unknown.
The raw page stays behind. The worker keeps the page it fetched only long enough to extract the facts. The copy is sealed and no later worker can read it. Only the structured record moves on. Clean room and credit explains why this matters.
Screening, scoring and deciding#
Assay applies the five knockout gates and, for candidates that pass, the 100-point rubric and the tie-breakers. It produces a recommendation. Countersign holds the queue in which the owner makes the decision. Both are described in How we decide what to build.
Crediting and specifying#
Once the owner approves a build, Waybill writes two things: the note that credits where the idea came from, and the specification the tool will be built from. The specification contains the official rule, the inputs and outputs, and worked examples. It contains nothing from the product that was observed. See Clean room and credit.
Building, verifying and listing#
Building. Moldloft reads the specification and generates the tool’s own repository from one of four templates.
| Template | Used for | In and out |
|---|---|---|
calculator | Rate build-ups, interest, thresholds | Numbers or dates in; the working and a cited total out |
checklist | Solicitation reviews, compliance preparation | Yes-or-no items with citations, and progress kept in the browser |
validator | Checking codes, tables or files | Text or a file, read in the browser and checked against bundled rules |
decision-tree | Eligibility and which clause applies | A short series of questions leading to a cited outcome |
Every template produces plain files that run in the browser, with no server behind them and nothing loaded from elsewhere.
Verifying. Shakedown runs five checks. A tool is not listed unless all five pass.
- It works offline. The tool loads once and keeps working with the network disconnected. Every table and date it needs ships with it.
- It cannot send anything. Every page carries a content security policy that includes
connect-src 'self'andform-action 'none', so the browser itself refuses any outside request. - It tracks nothing. No sign-in, analytics, cookies or counters. If the tool keeps work in the browser, it says so and offers a button to clear it.
- Its answers match the worked examples. The tool is run against examples calculated by hand, including the awkward cases: zero, an empty file, a date that crosses a boundary. All test data is made up.
- It shows its sources and its limits. Each result cites its regulation, paragraph and revision date. The tool says what it does not cover and that it is not professional advice, and carries an MIT license.
Listing. Chartroom adds the verified tool to the catalog. It also handles the other outcomes: linking to an existing tool, merging an idea into another entry, and retiring a tool whose rule has been repealed.
Watching and routing#
Tidegauge keeps the catalog accurate after a tool is published. On a schedule, it asks each official source whether anything has changed, using the cheapest check that works: a header that says whether a file is newer, a structured feed, or a comparison of a page’s structure.
| It watches | For |
|---|---|
| The Federal Register | New and proposed rules that touch the FAR, the DFARS or small business programs |
| The eCFR | Changed clauses, thresholds and effective dates |
| NIST’s publications | New revisions of standards such as SP 800-171 |
| Tools the catalog links to | Dead links, a new paywall, tracking that was added |
| Tools the project built | Whether each still matches the current rule |
The monitor does not change a tool itself. It reopens the item so that the pipeline handles it: a live tool whose rule changed goes back to be rebuilt, or is retired if the rule was repealed. A parked idea is looked at again when the thing blocking it clears. A linked tool that breaks or starts tracking its users goes back to be reconsidered.
Bellbuoy turns failures, paused items and approved edits into work for the right repository. Its main job is to avoid noise. If two hundred items fail on the same unfamiliar table, one task is opened, not two hundred: the worker builds a fingerprint from the worker’s name, the error code and the pattern of the failure, and adds to the count on an existing task when the fingerprint matches.
Why no worker uses AI#
Many pipelines reach for an AI model when a page is messy. This one does not, anywhere.
| With an AI model at run time | With fixed rules | |
|---|---|---|
| Repeatability | The same input can give different answers | The same input gives the same output on any machine |
| Explaining a result | Hard to say why a number was chosen | Every result traces to a line of code or a rule |
| Cost | A charge for every page or item | None beyond the machine it runs on |
| When confused | May invent an answer | Stops and waits for a rule |
AI is used only while the rules are being written, under review. How AI is used has the detail.
Sub-tools: one rule for each case#
Real pages do not look alike. One agency publishes a neat table and another buries the same figures in a brochure. Each variation is handled by a small, separate rule called a sub-tool, kept in the repository of the worker that needs it, under tools/<case>/. A sub-tool has three parts:
- A matching rule that says which pages or files it applies to.
- The logic that extracts, scores or builds, written as plain code.
- Fixtures: saved examples of the input together with the exact output expected, so that a test fails if the behaviour ever changes.
When no sub-tool matches, the worker stops work on that one item and marks it needs_subtool. Everything else in the queue carries on.
- 1Pause the itemThe item is marked needs_subtool, with the error code E_NEEDS_SUBTOOL.
- 2Open one taskBellbuoy opens a task in the worker’s repository describing the pattern, or adds to an existing one.
- 3Write the ruleA sub-tool and its fixtures are added and reviewed.
- 4Build and deployThe worker’s tests run, including the new fixtures, and the new version is rolled out.
- 5Run the paused items againEvery item that was waiting on that pattern is replayed automatically.
Each awkward case is solved once and tested from then on.
How the workers stay in step#
Workers do not talk to each other, and they do not touch the database. Each one asks a single service, Muster, for its next item, and reports the result back to it.
- Leases. A worker claims an item for a limited time. If the worker stops, the lease runs out and the item is offered again.
- One shared contract. The hub repository owns the definition of the handful of calls a worker makes (
lease,heartbeat,complete,fail,needs_subtool), the fourteen item states and the error codes. There is no separate shared-code repository for the ten workers to depend on. - Versions. Each worker states which version of the contract it speaks, and the hub checks every message against it. That lets one worker change and ship without the other nine being redeployed.
- Three error codes.
E_TIMEOUTmeans something outside took too long.E_PARSEmeans the data was broken.E_NEEDS_SUBTOOLmeans the data was valid and unfamiliar. - The wall is checked here too. The hub rejects any message to Moldloft that carries a raw page captured by Sextant.
Cluster architecture describes the queue service and the database behind it.
Found a mistake, or something that has gone out of date? Open an issue or write to [email protected]. This page is a text file you can read and correct: Source of this page.