Skip to content

Summary

The bundle is designed to grow in four directions, each with a fixed procedure. Run python3 tools/validate_bundle.py before committing anything.1

1. Add a concept to an existing holder

python3 tools/new_concept.py 30-actors labour-unions-and-media --title "Labour Unions and Media"

Fill in the frontmatter (sources[], tags, description), write # Summary → sections → # Links → # Footnotes, then add a line to that holder's index.md.

2. Add a new holder

Create the directory with the next free two-digit prefix (100-, 110-, …) plus a short slug, add an index.md following the existing pattern, and add a row to the parent table in the bundle index.

3. Add a source

Append to the evidence ledger with the next free id. Never reuse or renumber an id — ids are stable identities, and concept footnotes point at them.

4. Add a dated finding

Put it in 95-inbox as YYYY-MM-DD-<slug>.md with published, retrieved, as_of, stale_after and a snapshot note, per the intake convention. Never edit a published inbox item; append an # Amendment section.

The three rules that keep it coherent

  1. No restatement. A concept distils and cross-links; it does not copy another concept's content.2
  2. Label every claim. documented / inferred / contested, inline, with the interest named where relevant.1
  3. Nothing self-promotes. Agent-authored concepts stay status: draft; stable requires a verified event by the human owner.1

What the validator checks

Frontmatter parses; required keys present; status in the allowed set; every sources[].resource that is a bundle-relative path exists; every bundle-rooted internal link resolves; every footnote reference has a matching footnote definition. It does not check whether claims are true — that is the claim verification playbook.

Links

Footnotes


  1. Bundle charter — conventions, status promotion rules, intake policy. ↩↩↩

  2. OKF conventions note — what is inherited from the reference implementation and what diverges. ↩