This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

Ingesting and consulting sources are abcd verbs, and no corpus entry is a keyword stub

intentdraftsminoritd-2609292108089653

Typed links: related_issues iss-27 (sources tooling into the Go core; resolved by itd-76 for the corpus contract, and the ruling plans what remains) and iss-55 (the placeholder entries to backfill); builds_on itd-76 (the abcd source verb family this extends).

Press Release

Ingesting a source and consulting the sources corpus are abcd verbs, and every entry the corpus holds carries the text it claims to hold. The deterministic half of ingest and consult moves out of the command pages into the binary: a search over the corpus that answers by key, a text-quality check that refuses a keyword stub whose entry claims a fetchable source, and the backfill of the placeholder entries registered before the text was stored. "I asked the corpus a question and got back six entries that were only keywords," said Maya, a researcher-developer. "Now a stub is refused at ingest, the old ones carry their text, and the search is the same every time I run it."

Why This Matters

itd-76 moved the corpus contract into the binary as the abcd source verb family (init, add, ledger, declassify, sync-banlist, cite-check), and iss-27 was resolved on that delivery. Ingest and consult themselves are still command pages that an agent follows by hand: the page says "abcd fetches and converts nothing", consulting is "plain search", and the text-quality check is a step in prose. Six public entries (iss-55) are keyword stubs with no document text, which yielded nothing when the corpus was searched, so the corpus claims coverage it cannot deliver. The product thinker ruled on 2026-09-29 to plan the sources tooling into abcd's core with ingest and consult as abcd verbs (ruling J5), with the backfill of the placeholder entries as part of the same intent (ruling J6).

What's In Scope

  • A consult verb: a read-only search over the corpus that answers by key and class, under the confidentiality hard rule (a confidential entry is named by key only).
  • The ingest quality check as a verb: a stored text that is only keywords, for an entry that claims a fetchable source, is refused at source add and reported by a corpus lint.
  • The backfill of the six stub entries iss-55 names, and the on-disk PDF attached to the research-integrity paper entry, through the ingest path.

What's Out of Scope

  • A pluggable retrieval back end (iss-26, ruled "decide later" the same day).
  • Fetching and converting inside the binary, unless the planning interview decides it (see Open Questions).

Mechanism

Prompted (the claim-recording gradient): why the authors expect this to work, as a falsifiable "we expect X because Y" — not the outcome restated. Replace this line with the claim, or with the exact token None stated. alone on its line to record the claim as considered and declined.

Scope Conditions

Required (the claim-recording gradient): the population, platform, scale, or assumptions this claim holds under, one per top-level bullet — abcd intent plan stamps each with a persistent identity. Replace this line with those bullets, or with the exact token None stated. alone on its line.

Acceptance Criteria

Seeded by the run from the two records and the ruling, unconfirmed: the planning interview walks each one.

  • Given a corpus, when the consult verb runs with a query, then it lists the matching entries by key and class, names a confidential entry by key only, and writes nothing.
  • Given a text that is only keywords, for an entry that claims a fetchable URL, when source add is given it, then the add is refused, naming the entry.
  • Given the corpus after the backfill, when the corpus lint runs, then it reports no stub entry, and a consult over the six entries iss-55 names returns document text rather than keywords.

SOTA

Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the sources-provenance SOTA note.

  • Extraction quality is measured. On trafilatura's own 2026-10-02 benchmark (990 documents) trafilatura scores F 0.926, readability-lxml 0.853, jusText 0.862, newspaper4k 0.803 (trafilatura evaluation page). A Go port, go-trafilatura v2.2.6 (Apache-2.0, Go 1.26 or newer), exists and would be a Go dependency needing sign-off.
  • The keyword-stub test needs no model. jusText classifies a block by stopword density (bad below 0.30, good above 0.32 for long blocks), link density (above 0.2 is boilerplate) and length (70 and 200); a text that is only keywords has near-zero stopword density (jusText algorithm page). The density is computed against a per-language stoplist (the tool is called with get_stoplist("English")) and the bounds are block-level defaults for HTML, so the check must pick the stoplist by the entry's language, or skip with a warning when the language is unknown, and recalibrate the bounds for whole stored texts.
  • PDF text in pure Go is weak. pdfcpu extracts images, fonts and metadata, not plain text; ledongthuc/pdf extracts text but calls itself incomplete; poppler's pdftotext converts to plain text in reading-order or -layout mode (the three projects' own pages).
  • Consult stays grep-first (2026-07-08 ruling); the named upgrade, SQLite FTS5, is reachable CGO-free through modernc.org/sqlite (BSD-3-Clause, SQLite 3.54.1) and would be a dependency needing sign-off.
  • adr-38 bars an implicit fetch, not an explicit verb, so an ingest that fetches on command is within the rule; the page's "abcd fetches and converts nothing" predates it.
  • Path 2: consult and the stopword-density quality check (at source add and in source lint) are native; the backfill of the six stub entries is a documented act against a person's corpus, verified by source lint rather than by a build criterion; ingest <url|file> is explicit and converts through installed tools on PATH (pdftotext, pandoc, the trafilatura CLI), and with none present stages the bytes and tells the agent to convert and re-run with --text. The seam is the converter interface (bytes and media type in, text out), so go-trafilatura can replace the HTML rung under its own sign-off. The independent fit-challenge runs at plan time.

Open Questions

  • (SOTA 2026-10-23) The stopword threshold and token floor want calibrating on the real corpus before they harden; does the first cut ship as a lint warning and become a refusal once the six stubs and a sample of good entries have been scored?
  • Does ingest fetch and convert in the binary, or does the agent keep the fetch and the conversion while the binary does everything deterministic? The ingest page states "abcd fetches and converts nothing" today, and adr-38 bars an implicit fetch.
  • The consult verb's name: a sub-verb of abcd source, or its own top-level verb beside the /abcd:consult page (since retired into /abcd:library).
  • The backfill's home: the six entries live in a person's own corpus, not in this repository, so the backfill may be a documented act rather than a criterion the build can meet.

Audit Notes

Empty. Populated by intent-auditor when intent moves to shipped/.

Frontmatter

iditd-2609292108089653
typeintent
lifecycledrafts
severityminor

References1

Referenced by10

mentions5