This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

Knowledge That Compounds, Not Knowledge That Re-Derives

intentshippedmajorstandaloneitd-36

Closed as delivered on 2026-09-21 on the product thinker's ruling: /abcd:memory ingest, ask and lint, the quotation budgets (MQ001, MQ002), the source-class rules (MS001, MS002), the licence rule (ML001) and --keep-original shipped in v0.1.0 while this record sat planned with no spec. The three criteria that wait on other records (the dredge synthesiser's output, the shared registry with the code-vendoring path, the lifeboat's restrictive-licence gate on a kept original) are captured as their own issues rather than carried here: iss-2609211905340006, iss-2609211905346507 and iss-2609211905347458.

Packaging framing per adr-28 (supersedes adr-18). The restrictive-licence gate's consumer is the lifeboat (/abcd:disembark), future/inert at launch: the curated release excludes .abcd/** wholesale, so /abcd:launch never evaluates what the gate guards. The canonical framing lives in the brief (05-internals/09-provenance-substrate.md § 4, 07-memory.md § 4, 04-surfaces/04-launch.md § 2).

Press Release

abcd ships /abcd:memory — a per-voyage curated knowledge substrate that compounds across sessions instead of being re-derived from scratch every conversation. Researchers and engineers running a voyage under abcd can drop external sources (PDFs, transcripts, articles, talks) into the voyage, and abcd reads them, distils them into typed entity/topic pages with full citation, and discards the original by default. The same .abcd/memory/ namespace also receives synthesised principles from session memory (existing behaviour), cross-references from oracle reviews and .abcd/work/ notes, and synthesis output from /abcd:dredge (itd-25, a separate intent). New sub-verb /abcd:memory ask <question> queries the substrate and returns synthesis with citations; /abcd:memory lint enforces quotation budgets, licence declarations, and cross-source provenance hygiene. The pattern is the Karpathy LLM Wiki (April 2026) — "compile once, query repeatedly" replacing RAG-shaped re-derivation.

"Last quarter I'd open a session, paste the same ten paragraphs of background context, and lose half the conversation rebuilding shared ground," said Carol, technical lead. "Now I point the agent at .abcd/memory/ and we pick up where we left off — and I can see exactly where each claim came from. The default-no-original rule means I can ingest a 200-page paper without worrying about copyright; the lint catches when a derivative page quotes too much. Nothing I've ever paid for accidentally ends up in a public repo."

Why This Matters

Today's .abcd/memory/ is the receiving end of a single upstream — vendor session memory (Claude / opencode), distilled by the memory writer into domain-grouped principle pages. That's the per-project compounding-curated agent-experience layer. Useful, but narrow.

There's a real gap: per-project durable knowledge has multiple legitimate upstreams, not just session memory. Research-shaped projects ingest external papers; mixed-licence projects ingest internal notes alongside paywalled academic sources; long-running projects accumulate patterns from oracle reviews and the issue ledger. Today the user has no abcd surface for any of this — they paste context into chat, lose it at session end, and re-derive it next session. RAG patterns help but re-derive synthesis on every query. The Karpathy LLM Wiki pattern (April 2026, gist 5k+ stars) names a different shape: synthesis happens at ingest, not query — cross-references pre-built, contradictions flagged during maintenance.

The reframe lands cleanly because abcd doesn't need a new namespace. .abcd/memory/ already exists as the per-project compounding-curated artefact. Widening its upstream funnel from "vendor session memory only" to "session memory + external sources + reviews + notes + dredge synthesis + spec-extracted theory" is structurally smaller than creating a new top-level namespace — and avoids the visibility-rule violations that would come with a separate .abcd/knowledge/ directory (per the locked decision in 05-internals/03-configuration.md § 1: "no exceptions to the visibility rule").

Default-no-originals is what makes ingest copyright-safe. External sources may be paywalled, NDA'd, or under restrictive licences. Storing the original creates a copyright-laundering vector. Default-no-originals + bounded per-page quotation (≤5%, no contiguous span >150 words) + cumulative source-coverage lint (≤25% deduplicated coverage across all pages citing the same source, span-level dedup) closes the laundering vector for the common case. --keep-original is the explicit opt-in for sources the user owns or has clear redistribution rights for; the restrictive-licence gate (consumed by the lifeboat /abcd:disembark, per adr-28) then refuses to surface anything under .abcd/memory/sources/ unless an explicit allowlist entry exists.

Loot substrate reuse compresses cost. itd-26 /abcd:loot (per itd-26) and /abcd:memory ingest need the same machinery: licence detection, citation generation, source-hash registry, the lifeboat's restrictive-licence gates. This intent ships the substrate as a separable component spec at 05-internals/09-provenance-substrate.md. itd-26's verb sits on top — no re-implementation, no fragile bespoke licence layer.

What's In Scope

  • /abcd:memory command with sub-verbs ingest / ask / lint. Bare invocation renders state per the universal bare-command-as-render discipline. Surface contract: 04-surfaces/07-library.md, the memory verbs having merged into /abcd:library (itd-2610090831227812). Substrate spec: 05-internals/07-memory.md.
  • Schema extension on .abcd/memory/ (NOT migration): three new conventional sibling files (index.md generated catalog, log.md append-only ingest history, contradictions.md curator-surfaced register) plus typed source: frontmatter on every memory page. Existing flat-named pages preserved; schema extends in place.
  • Typed source: frontmatter with closed-enum source-class taxonomy: session_memory / external_pdf / external_transcript / external_article / oracle_review / work_notes / issue_ledger / dredge_synthesis / spec_modification_grammar / modification_grammar. Every external source carries citation + licence + source_hash + ingested_at.
  • Default-no-originals + --keep-original: ingest reads → distils → discards by default; flag opts into storage at .abcd/memory/sources/<sha256>.<ext>; the lifeboat licence gate refuses to surface sources/ files without an explicit allowlist entry.
  • Quotation budgets, two layers: per-page (MQ001: ≤5% per page, no >150-word contiguous span) + cumulative source-coverage (MQ002: ≤25% deduplicated coverage across all pages citing one source_hash, span-level dedup, configurable threshold).
  • Source-class lints: MS001 (advisory: single-source-class synthesis is low cross-validation), MS002 (blocks: cross-class synthesis without weighting_note field), ML001 (blocks: external_* page missing licence field; unknown is acceptable but must be explicit).
  • Curator role on principle-distiller (existing agent; itd-31 precedent — agent count stays 15). Inputs extended: external-source ingest pipeline added alongside existing session-memory + reviews + work-dir + code-rescuer inputs. New output mandate: typed source: frontmatter on every emitted page. New lint pass: MQ/MS/ML codes.
  • Provenance/licence substrate at 05-internals/09-provenance-substrate.md — separable spec; SPDX licence detection; citation generation; source-hash registry at .abcd/memory/.sources_index.json (regenerable per the lifecycle taxonomy); the lifeboat's restrictive-licence gates. Shared with itd-26 loot.
  • Karpathy citation in 05-internals/07-memory.md (component description) + research/related-work.md (prior-art table). NOT in 01-product/03-mental-model.md (per idea-1 R5 review: mental model is for axes, not components; six-week-old citations don't belong in the project's most-stable file).
  • Brief edits: artefact-lifecycle taxonomy added to 05-internals/04-universal-patterns.md § 8 (regenerable / append-only / compounding-curated). Reserved-vocabulary entry in 02-constraints/04-naming.md for source.class + lifecycle classes.

What's Out of Scope

  • A separate .abcd/knowledge/ namespace. Initially proposed (idea-1 pre-review draft); killed by RP review (visibility-rule lock; namespace-creep). Memory unification at the destination (existing .abcd/memory/ namespace) is the right shape; new top-level was wrong.
  • Schema migration of existing flat-named pages. Current <type>_<domain>_<slug>.md already encodes Karpathy's three axes (type = page class; domain = topic; slug = entity ID). Renaming to nested directories would be cosmetic and would touch every existing memory page; not justified.
  • /abcd:dredge absorption. /abcd:dredge (itd-25) stays a distinct verb. Its synthesis output writes to .abcd/memory/<type>_<domain>_<slug>.md with source.class: dredge_synthesis (shared destination namespace), but the verb is not folded into /abcd:memory. User moments differ (dredge = "look across what we already have"; ingest = "I have a new source"); folding into one surface mismatches the user's mental grouping. Independent revisit triggers preserved.
  • Cross-project frontier sharing. Per-project in this intent (privacy + curation overhead). Cross-project sharing surfaces as a fresh idea when triggers fire (≥3 projects with non-trivial accumulated knowledge AND user-driven request).
  • Close-paraphrase detection. The quotation lint catches quotation, not close paraphrase. A page that paraphrases an entire source at 100% coverage in its own words is a derivative work and isn't fair-use protected. This intent acknowledges this as a documented limitation in 05-internals/07-memory.md § 5; semantic-similarity infra to detect paraphrase is a separate intent.
  • Auto-classify the upstream. This intent requires the user to invoke /abcd:memory ingest <path> explicitly. Auto-detection (e.g., scanning ~/Downloads/*.pdf for ingest candidates) is deferred — a separate intent if friction proves real.
  • MCP server for runtime memory editing. Other knowledge frameworks ship MCP servers for add_page, merge_pages, etc. This intent ships JSON-on-disk + CLI surface only; the curator agent (principle-distiller) edits via standard file-edit tools. MCP integration is deferred if friction is real.

Mechanism

None stated.

Scope Conditions

None stated.

Acceptance Criteria

BDD format, per itd-1 acceptance gates. These gates are checked by intent-fidelity-reviewer Role 1 when this intent moves to shipped/.

  • Given an external source with declared SPDX licence in a LICENSE file, when the user runs /abcd:memory ingest <path>, then the resulting memory page(s) carry source.licence: <spdx-id> AND the original is NOT stored at .abcd/memory/sources/ AND a registry entry exists at .abcd/memory/.sources_index.json[<sha256>] whose consumers map contains the memory key.
  • Given an external source ingested without --keep-original, when the user later runs /abcd:memory ask <question> referencing that source, then the answer cites the source by (class, citation, source_hash) but never reproduces the original; if the original is needed for re-distillation, the user is prompted to re-ingest.
  • Given an external source ingested with --keep-original, when /abcd:disembark runs the restrictive-licence gate, then the gate refuses to surface .abcd/memory/sources/<sha256>.<ext> unless .abcd/launch-allowlist.json explicitly names it (the allowlist re-includes files into the gate's own evaluation input, never into the launch payload — adr-28).
  • Given a memory page with source.class: external_pdf and ≥150-word contiguous quotation, when /abcd:memory lint runs, then the lint emits MQ001 and points at the offending span.
  • Given N memory pages collectively citing one source_hash with cumulative deduplicated coverage ≥25%, when /abcd:memory lint runs, then the lint emits MQ002 and refuses any further quotation block from that source until coverage drops below the threshold (via summarisation rewrite of existing pages).
  • Given a memory page with source.class: session_memory only (no cross-class inputs), when /abcd:memory lint runs, then the lint emits MS001 (low cross-validation; advisory only — does not block).
  • Given a memory page mixing session_memory + external_pdf sources without a weighting_note field, when /abcd:memory lint runs, then the lint emits MS002 and blocks until the weighting note is added.
  • Given an external source ingested without a licence: field, when /abcd:memory lint runs, then the lint emits ML001 and blocks until the licence is declared (unknown is acceptable but must be explicit).
  • Given an existing pre-itd-36 project with flat-named memory files, when /abcd:ahoy runs after itd-36 ships, then the existing files are NOT renamed; index.md is generated over them; source.class: session_memory is backfilled as the default.
  • Given dredge synthesis output (itd-25), when dredge runs, then the dredge agent writes its synthesised entries to .abcd/memory/<type>_<domain>_<slug>.md with source.class: dredge_synthesis AND the per-run report stays at .abcd/logbook/dredge/<ts>/.
  • Given the same source content is ingested by both /abcd:memory ingest (as documentation) and /abcd:loot (as code, per itd-26), when both have run, then the registry has one entry with ingest_count: 2 whose consumers map holds both the memory and loot keys (memory and loot share one substrate registry).
  • Given the lifeboat's gated payload includes a file with citation.licence: GPL-3.0 AND the project is being published as MIT, when /abcd:disembark runs the restrictive-licence gate, then the gate refuses with a licence-mismatch error AND lists the offending file. Override via --accept-licence-risk logs the override in the disembark report.
  • Given this intent's cost-discipline boundary, when a promotion proposes adding known_failure_modes (or any other dynamic-state field) to memory frontmatter, then the proposal is rejected as scope creep — those fields belong to other intents (Frontier Awareness, per a separate intent, for known_failure_modes).

Implementing specs

itd-36 was implemented across two specs of the predecessor store; those ids are preserved below as history. The native spec store reuses both numbers for other specs (live spc-38 is itd-136's record explorer, live spc-39 itd-137's relationship chart), so each carries the predecessor-store qualifier. The frontmatter spec_id records the native spec, spc-2609211905174684, the record catch-up that covers the write core and the quality gate together. Historical index:

  • spc-38 (predecessor store; primary) — /abcd:memory write core (the memory substrate, ingest, registry).
  • spc-39 (predecessor store) — /abcd:memory lint quality gate (quotation-budget / licence / provenance lint).

Ship gate — adversarial worked examples

Per the idea-1 R5 review: the push replaces "≥3 projects in anger" (unachievable pre-ship) with three adversarial worked examples demonstrated before itd-36 is closed. Confirmatory examples are not enough; pick projects where ingest might fail:

  1. Research-shaped project — heavy external PDFs, papers, talks. Test: does the synthesis stay coherent across 20+ external sources? Does the cumulative coverage lint trigger correctly? Are entity/topic pages distinguishable from a stack of PDF summaries?
  2. Tooling project (e.g., abcd itself dogfooding) — almost no external sources; mostly session memory + reviews + notes. Test: does the schema feel cluttered with source.class: session_memory defaults? Does index.md provide value when most pages are principle-shaped?
  3. Mixed-licence project — open-source docs + proprietary internal notes + paywalled academic sources. Test: do the licence gates and quotation budgets behave correctly? Does the lifeboat licence gate correctly refuse to surface proprietary content under --keep-original?

If all three produce coherent .abcd/memory/ outputs, this intent ships. If one produces sprawl or fails the licence gates, scope is reduced and the failed example becomes the primary debug target.

Decisions

Ruled by the product thinker on 2026-09-21: close as delivered; the remainders become issues so they are not forgotten.

Open Questions

None open; the four this record carried were operational and are answered by what shipped (the persona quote's role stands as written; the lint codes are the ones the package carries; ingest takes one source per call; the coverage index is rebuilt on demand).

Audit Notes

Fidelity review — receipt rcp-f3f5495f519e (verifier intent-auditor claude-fable-5-1).

Provenance: intent-auditor@claude-fable-5-1 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:fe668f0ff8a49b54b541d71193702b9a2e7a70f0834d839d33ae89ed0ecdb3e0 Input attestations: diff:internal/core/memory, internal/surface/cli, commands/memory.md and .abcd/work/issues/open at chore/audit-run-a-1 80b44890 (git ls-tree -r; spc-2609211905174684 closed with criteria 3, 10, 11, 12 declared out of scope)@sha256:ac58bb5ee41ee25ad15be29a66180b35651db93a7b764206dcbbf6361f98ce0f;

Acceptance rollup: MET 5 · MET_WITH_CONCERNS 4 · NOT_MET 4 · INCONCLUSIVE 0

Per-criterion verdicts:

  • ac-1 — MET: DetectLicence reads an SPDX header, then a manifest or LICENSE file, and ingest writes the result as the page's licence; the original is copied under sources/ only when KeepOriginal is set; the registry at .abcd/memory/.sources_index.json is keyed by content hash and its entry's consumers map is written under the memory key evidence: internal/core/memory/provenance.go:302 — "// DetectLicence detects the licence of a source. Priority: in-file SPDX header," evidence: internal/core/memory/ingest.go:227 — "if req.KeepOriginal {" evidence: internal/core/memory/provenance.go:46 — "return filepath.Join(Dir(repoRoot), ".sources_index.json")" evidence: internal/core/memory/ingest.go:170 — "memoryConsumer, _ = consumers["memory"].(map[string]any)" evidence: internal/core/memory/ingest.go:205 — "ContentHash: contentHash, Consumer: "memory", SourceClass: sourceClass,"
  • ac-2 — MET_WITH_CONCERNS: ask returns AskCitation values carrying class, citation and source_hash copied from the page's source block, and reads only distilled pages, never a kept original; the concern is that no path in ask prompts a re-ingest when the original is needed — the only re-ingest suggestion in the package is lint's MQ003 fix text evidence: internal/core/memory/ask.go:30 — "type AskCitation struct {" evidence: internal/core/memory/ask.go:33 — "SourceHash string json:"source_hash"" evidence: internal/core/memory/lint.go:446 — "fix := "Re-ingest the source (or backfill source_token_count in .sources_index.json).""
  • ac-3 — NOT_MET: disembark packs the record families by path and reads neither source.licence nor a kept original, so nothing refuses to surface .abcd/memory/sources/< sha256>.< ext> against the launch allowlist; the spec declares criterion 3 out of scope and the gap is the open issue iss-2609211905347458 evidence: .abcd/work/issues/open/iss-2609211905347458-the-lifeboat-s-restrictive-licence-gate.md:16 — "The lifeboat restrictive-licence gate does not read a kept memory original." evidence: .abcd/development/specs/closed/spc-2609211905174684-memory-unification.md:44 — "criteria 3,"
  • ac-4 — MET: the quotation budget's MaxContiguousQuoteWords is 150 and lint emits MQ001 at the offending span's line when a contiguous quoted span exceeds it, with a test on the budget evidence: internal/core/memory/coverage.go:44 — "MaxContiguousQuoteWords: 150," evidence: internal/core/memory/lint.go:432 — "l.emit("MQ001"," evidence: internal/core/memory/memory_test.go:326 — "func TestLintQuotationBudgetMQ001(t *testing.T) {"
  • ac-5 — MET_WITH_CONCERNS: the corpus pass computes deduplicated cumulative coverage per source hash and emits MQ002 as a blocker at or over the 25% CumulativeBlockPct, which fails the lint's exit until pages are rewritten; the concern is that only unambiguous single-source coverage blocks — the same coverage driven by ambiguous multi-source attribution is capped at warn — and the refusal is the blocker exit rather than a per-quotation-block refusal evidence: internal/core/memory/coverage.go:47 — "CumulativeBlockPct: 0.25," evidence: internal/core/memory/lint.go:539 — "Code: "MQ002", Severity: "blocker", File: indexPath," evidence: internal/core/memory/lint.go:546 — "Code: "MQ002", Severity: "warn", File: indexPath,"
  • ac-6 — MET: a page whose sources resolve to one class emits MS001 at severity info, which the exit contract says never affects exit evidence: internal/core/memory/lint.go:61 — ""MS001": "info"," evidence: internal/core/memory/lint.go:352 — "l.emit("MS001"," evidence: internal/core/memory/lint.go:727 — "Exit contract: blockers exit nonzero; warnings are curator-advisory (exit 0, non-blocking); infos never affect exit."
  • ac-7 — MET: a page mixing source classes with no weighting_note emits MS002 at severity blocker, so the lint exits non-zero until the note is added evidence: internal/core/memory/lint.go:62 — ""MS002": "blocker"," evidence: internal/core/memory/lint.go:359 — "l.emit("MS002","
  • ac-8 — MET: an external source with no licence field emits ML001 at severity blocker on both the single-source and the plural-sources shapes, the message states that an explicit unknown is acceptable and a missing field is the violation, and the schema refuses an empty licence string; tests cover the plural-class and whitespace shapes evidence: internal/core/memory/lint.go:63 — ""ML001": "blocker"," evidence: internal/core/memory/lint.go:385 — "l.emit("ML001"," evidence: internal/core/memory/schema.go:182 — "licence must be a non-empty string (explicit 'unknown' is acceptable)" evidence: internal/core/memory/licence_plural_classes_test.go:44 — "func TestLicenceGateReadsPluralSourceClasses(t *testing.T) {"
  • ac-9 — MET_WITH_CONCERNS: backfillLegacy rewrites a flat pre-itd-36 page's frontmatter in place with source.class session_memory and never renames the file, and the bare verb renders index.md over the pages it finds; the concern is the trigger — the criterion names /abcd:ahoy, and ahoy has no memory step, so the backfill runs when a memory verb touches the store evidence: internal/core/memory/writer.go:481 — "func backfillLegacy(mem string) ([]string, error) {" evidence: internal/core/memory/schema.go:41 — "const backfillSourceClass = "session_memory"" evidence: internal/core/memory/bare.go:93 — ""index.md": RenderIndex(infos)," evidence: internal/core/memory/backfill_preamble_test.go:120 — "func TestBackfillLegacyStillBackfillsGenuineLegacyPages(t *testing.T) {" evidence: internal/core/ahoy/gitignore.go:39 — ""public": {"/.abcd/", "/memory/"},"
  • ac-10 — NOT_MET: no dredge synthesiser writes dredge_synthesis pages into the memory store; the spec declares criterion 10 out of scope and the gap is the open issue iss-2609211905340006 evidence: .abcd/work/issues/open/iss-2609211905340006-dredge-synthesis-output-lands-in-the.md:3 — "id: "iss-2609211905340006"" evidence: .abcd/development/specs/closed/spc-2609211905174684-memory-unification.md:45 — "10, 11 and 12 are the out-of-scope items"
  • ac-11 — NOT_MET: the registry is written by memory ingest alone; no loot consumer shares it and no ingest_count of 2 with both keys can arise; the spec declares criterion 11 out of scope and the gap is the open issue iss-2609211905346507 evidence: .abcd/work/issues/open/iss-2609211905346507-one-registry-entry-for-a-source-ingested.md:3 — "id: "iss-2609211905346507"" evidence: internal/core/memory/ingest.go:205 — "ContentHash: contentHash, Consumer: "memory", SourceClass: sourceClass,"
  • ac-12 — NOT_MET: no disembark gate compares a citation's licence with the project's, and no --accept-licence-risk override exists anywhere under internal/; the spec declares criterion 12 out of scope and the open issue iss-2609211905347458 names the GPL-3.0-against-MIT refusal as wanted evidence: .abcd/work/issues/open/iss-2609211905347458-the-lifeboat-s-restrictive-licence-gate.md:16 — "refuse a gated payload carrying a GPL-3.0 citation when the project publishes as MIT"
  • ac-13 — MET_WITH_CONCERNS: the page schema fails closed on any key outside it, so a known_failure_modes field cannot enter memory frontmatter without a schema change; the concern is that the criterion describes a proposal-review boundary, and no gate reviews proposals — the schema is the only mechanical form of the rejection evidence: internal/core/memory/schema.go:425 — "DistilledPage carries unknown key(s) %v — the boundary fails closed on keys outside the schema"

Gap audit:

  • honoured:
    • ingest detects the licence, keeps no original unless asked, and registers the source under the memory consumer evidence: internal/core/memory/ingest.go:227 — "if req.KeepOriginal {"
    • the five lint codes with their promised severities evidence: internal/core/memory/lint.go:58 — ""MQ001": "warn","
    • legacy flat pages are backfilled in place, never renamed evidence: internal/core/memory/writer.go:481 — "func backfillLegacy(mem string) ([]string, error) {"
  • diverged:
    • MQ002 refuses any further quotation block from an over-budget source evidence: internal/core/memory/lint.go:546 — "Code: "MQ002", Severity: "warn", File: indexPath,"
    • the backfill runs under /abcd:ahoy evidence: internal/core/memory/bare.go:93 — ""index.md": RenderIndex(infos),"
    • ask prompts a re-ingest when the original is needed evidence: internal/core/memory/lint.go:446 — "fix := "Re-ingest the source (or backfill source_token_count in .sources_index.json).""
  • missing:
    • the disembark restrictive-licence gate over kept originals and licence mismatches (criteria 3 and 12) evidence: .abcd/work/issues/open/iss-2609211905347458-the-lifeboat-s-restrictive-licence-gate.md:16 — "The lifeboat restrictive-licence gate does not read a kept memory original."
    • dredge synthesis pages in the memory store (criterion 10) evidence: .abcd/work/issues/open/iss-2609211905340006-dredge-synthesis-output-lands-in-the.md:3 — "id: "iss-2609211905340006""
    • one registry shared by memory and loot (criterion 11) evidence: .abcd/work/issues/open/iss-2609211905346507-one-registry-entry-for-a-source-ingested.md:3 — "id: "iss-2609211905346507""

References

Grounds

  • pursued: the record is being closed for work v0.1.0 carried, so that the store's state matches what ships and the release cut stops carrying a planned intent whose code is on main; shown wrong if the delivered verbs are found not to meet the criteria this record keeps

Frontmatter

iditd-36
typeintent
lifecycleshipped
kindstandalone
severitymajor

References1

Referenced by20

mentions37