Mark C001 as a loose conjecture and sharpen C005 to the manuscript's meta-level cycle without new evidence or a supported state. Record that Added by is the drafter, and add Position origin on each claim. Assistant: grok Assistant-Session: 01a10946-16b2-7771-88ac-c6bc305423b3
247 lines
12 KiB
Markdown
247 lines
12 KiB
Markdown
# Research Artifact Convention
|
||
|
||
## Purpose
|
||
|
||
This document defines the identifier, file-layout, and provenance conventions
|
||
for Coulomb-native research artifacts: research programs, papers, and their
|
||
paper-local claims, evidence, and criticism. It implements the M0 exit
|
||
criterion in `seed/CoulombResearchMilestonePlan.md` ("Coulomb Research can
|
||
register and evolve one internal research paper with versioned artifacts and
|
||
explicit publication state").
|
||
|
||
The design rationale for these object types lives in the seed documents; this
|
||
file is the concrete, implementation-facing convention, not a restatement of
|
||
the kernel. See:
|
||
|
||
- `seed/CoulombResearchKernel.md` — why Paper, Program, Claim, and Evidence
|
||
are derived views over the kernel primitives (Actor, Proposition, Evidence,
|
||
Action, Resource), not kernel primitives themselves.
|
||
- `seed/PublicationInterface.md` — publication stages (P1/P2/P3) and the
|
||
publication adapter.
|
||
- `seed/CoulombResearchMilestonePlan.md` — the milestone sequence this
|
||
convention supports (M0–M5 in particular).
|
||
|
||
## 1. Identifier Namespaces
|
||
|
||
Coulomb Research uses three distinct, non-interchangeable identifier
|
||
namespaces. An identifier from one namespace must never be reused as, or
|
||
confused with, an identifier from another.
|
||
|
||
| Namespace | Pattern | Example | Scope | Meaning |
|
||
| --- | --- | --- | --- | --- |
|
||
| Research program | `RP-NNN` | `RP-000` | facility-wide | A research program: a sustained line of inquiry that hosts one or more papers. |
|
||
| Paper | `CR-NNN` | `CR-000` | facility-wide | A single Coulomb-native research paper (manuscript + claims + evidence + criticism + publication state), belonging to exactly one program. |
|
||
| Paper-local object | `CR-NNN-<T><NNN>` | `CR-000-C001` | scoped to one paper | A claim, evidence item, or criticism item addressable within one paper. |
|
||
| Implementation work | `CR-WP-NNNN` | `CR-WP-0002` | facility-wide | A workplan implementing repository/software infrastructure, tracked in `workplans/`. |
|
||
|
||
**These namespaces are disjoint by construction:**
|
||
|
||
- `RP-NNN` and `CR-NNN` both use the `CR`/`RP` prefixes but are never
|
||
zero-padded to the same width by coincidence — programs use `RP-`, papers
|
||
use `CR-`. A number appearing in both (e.g. `RP-000` and `CR-000`) refers
|
||
to *different objects that happen to share a sequence position*, not the
|
||
same object. `RP-000` is the "Researching Research" program; `CR-000` is
|
||
Paper Zero, its first paper.
|
||
- `CR-NNN` (a paper) and `CR-WP-NNNN` (a workplan) are visually similar but
|
||
serve different purposes: a paper is a research artifact with epistemic
|
||
content (claims, evidence, a publication stage); a workplan is
|
||
implementation bookkeeping (tasks, status, a State Hub UUID). `CR-000` is
|
||
never itself the subject of a `CR-WP-*` task's *content* — a workplan may
|
||
reference a paper ID in its text, but the paper's own claim/evidence/
|
||
criticism ledger lives in the paper's own files, not in a workplan.
|
||
Numbering is independent: `CR-000` and `CR-WP-0002` do not need to align
|
||
and will not stay aligned as each sequence grows.
|
||
|
||
### 1.1 Paper-local object IDs
|
||
|
||
Within a single paper, addressable claims, evidence items, and criticisms
|
||
use the pattern `<paper-id>-<T><NNN>`, where `<T>` selects the object type:
|
||
|
||
| Type letter | Object | Example |
|
||
| --- | --- | --- |
|
||
| `C` | Claim | `CR-000-C001` |
|
||
| `E` | Evidence | `CR-000-E001` |
|
||
| `X` | Criticism | `CR-000-X001` |
|
||
|
||
`NNN` is a zero-padded, monotonically increasing sequence, scoped per type
|
||
per paper (so `CR-000-C001`...`CR-000-C00N` and `CR-000-E001`...`CR-000-E00M`
|
||
number independently). IDs are never renumbered or reused after being
|
||
assigned, even if the underlying claim is later withdrawn or superseded —
|
||
withdrawal is recorded as a state change (see §4), not a deletion.
|
||
|
||
Cross-references between paper-local objects and program- or paper-level
|
||
objects (e.g. "evidence `CR-000-E003` bears on claim `CR-000-C002`") are
|
||
written inline in `evidence.md` and `criticism.md` using the full ID, so a
|
||
reference resolves unambiguously even outside the file's own paper context.
|
||
|
||
## 2. File Layout
|
||
|
||
```text
|
||
research/
|
||
├── programs/
|
||
│ └── RP-000-researching-research/
|
||
│ ├── INTENT.md # why this program exists, its scope
|
||
│ ├── questions.md # the open questions the program tracks
|
||
│ └── papers/
|
||
│ └── paper-000/ # directory name mirrors the paper id (CR-000 → paper-000)
|
||
│ ├── README.md # paper summary + links to the other files
|
||
│ ├── manuscript.md # the paper text/outline
|
||
│ ├── claims.md # CR-000-C001, CR-000-C002, ...
|
||
│ ├── evidence.md # CR-000-E001, ...; each entry states what it bears on
|
||
│ ├── criticism.md # CR-000-X001, ...; each entry states what it challenges
|
||
│ ├── revision-log.md # dated log of substantive manuscript revisions
|
||
│ └── publication.yaml # publication stage/state metadata (§3)
|
||
└── registry/
|
||
└── papers.yaml # facility-level index of all papers (id, program, stage, version, status)
|
||
```
|
||
|
||
Rules:
|
||
|
||
- A program directory is named `<RP-id>-<slug>`; a paper directory under
|
||
`papers/` is named `paper-<NNN>` matching the numeric suffix of its
|
||
`CR-NNN` ID (so `CR-000` lives at `.../papers/paper-000/`). The directory
|
||
name is a filesystem-safe mirror of the ID, not an independent identifier;
|
||
the authoritative ID is the `paper_id` field in `publication.yaml`.
|
||
- A paper belongs to exactly one program directory. If a paper's research
|
||
trajectory later spans multiple programs, that is a program-design
|
||
decision to make explicitly (e.g. via a new workplan), not an implicit
|
||
file move.
|
||
- The facility-level `research/registry/papers.yaml` is the single
|
||
authoritative index of which papers exist; see §5.
|
||
|
||
## 3. Publication Metadata
|
||
|
||
Every paper carries a `publication.yaml` recording its publication stage per
|
||
`seed/PublicationInterface.md` §4. At M0/M1, every paper starts and remains
|
||
at stage P1 (internal circulation):
|
||
|
||
```yaml
|
||
paper_id: CR-000
|
||
research_program: RP-000
|
||
publication_stage: P1
|
||
publication_state: internal-circulation
|
||
version: "0.1"
|
||
```
|
||
|
||
**P1 internal-only metadata is distinct from "the manuscript is finished."**
|
||
`publication_stage: P1` / `publication_state: internal-circulation` describes
|
||
*who may see the artifact and under what expectations* (collaborator
|
||
review, mutable revisions, no venue-compliance obligation — see
|
||
`seed/PublicationInterface.md` §4). It says nothing about whether the
|
||
manuscript content itself is a complete draft, an outline with labeled gaps,
|
||
or a full v0.1. A paper skeleton created under M0 (outline manuscript,
|
||
explicitly labeled conjectures, no fabricated evidence) is legitimately
|
||
`publication_state: internal-circulation` from the moment it exists in the
|
||
repository — internal-circulation is the *default resting state* for
|
||
work-in-progress, not a milestone reached after the draft is polished. A
|
||
distinct, later, and heavier step — an actual internal circulation *release*
|
||
(e.g. notifying collaborators, per M7) — is a publication *event* layered on
|
||
top of this state, not implied by the state field alone. This convention
|
||
does not define that release workflow; it is out of scope for M0.
|
||
|
||
Advancing a paper beyond P1 (to P2 external preprint or P3 venue candidate)
|
||
follows `seed/PublicationInterface.md` §4 and is out of scope for M0/M1.
|
||
|
||
## 4. Provenance
|
||
|
||
Every claim, evidence item, and criticism entry should record, inline in its
|
||
own file entry, at minimum:
|
||
|
||
- the actor who transcribed or drafted the entry text (human or agent, per
|
||
`seed/CoulombResearchKernel.md` §2.1/§4), written as `human:<name>` or
|
||
`agent:<name>`,
|
||
- the date that text was added,
|
||
- for agent-drafted entries, the model/toolchain if relevant.
|
||
|
||
On a claim entry, that drafter/transcriber relation is the `Added by`
|
||
field. **`Added by` means who wrote the words of the entry. It does not
|
||
mean who originated the position, and it does not mean who approved the
|
||
commit.** Approval is a different relation: a human can retain commit
|
||
approval without being the source of the proposition and without being the
|
||
drafter (`manuscript.md` §7 for CR-000). Do not record approval in
|
||
`Added by`.
|
||
|
||
A claim entry must also record `Position origin`.
|
||
`seed/CoulombResearchKernel.md` §4 treats "source asserts P" and "actor
|
||
asserts P" as non-interchangeable, so a single drafter field cannot stand
|
||
in for both. Use one of:
|
||
|
||
- `source: <path>` — the position is a transcription or close restatement
|
||
of that source. Name the source. Do not attribute the position to the
|
||
transcriber.
|
||
- `actor: <id>` — a Coulomb actor originated the position in this entry,
|
||
rather than taking it from a source. This is "actor asserts P". Use it
|
||
only when the record supports origination, not as the default for
|
||
whoever typed the file.
|
||
- `mixed` — name the source the position comes from and the actor who
|
||
added an operational reading the source does not already state. Say
|
||
which is which.
|
||
- `unrecorded` — the files do not support the distinction. Do not guess.
|
||
|
||
Do not overwrite `Added by`, and do not delete a recorded origin, when a
|
||
later actor edits an entry. Name that later actor and date on the wording
|
||
they added, and append the change to `revision-log.md`.
|
||
|
||
Evidence and criticism entries are not claim positions. Their `Added by`
|
||
or `Critic` field likewise names who wrote that entry. When an evidence
|
||
entry draws on a source, its `Source` field records that source; it does
|
||
not make the drafter the origin of a claim.
|
||
|
||
This is a lightweight, file-embedded application of the kernel's provenance
|
||
requirement (`seed/CoulombResearchKernel.md` §4) — it does not introduce a
|
||
database or a separate provenance object. State changes (a claim marked
|
||
contested, superseded, or withdrawn; a criticism marked resolved) are
|
||
appended to `revision-log.md` with a date and actor, never edited in place
|
||
by deleting the prior state.
|
||
|
||
## 5. Registry
|
||
|
||
`research/registry/papers.yaml` lists every registered paper with the
|
||
minimal fields needed to discover and cross-check it, following the M5
|
||
example format in `seed/CoulombResearchMilestonePlan.md`:
|
||
|
||
```yaml
|
||
papers:
|
||
- id: CR-000
|
||
title: >
|
||
Coulomb Research: A Minimal Self-Improving Architecture
|
||
for Human-AI Co-Creation Science
|
||
program: RP-000
|
||
stage: P1
|
||
version: "0.1"
|
||
status: internal-circulation
|
||
path: research/programs/RP-000-researching-research/papers/paper-000/
|
||
```
|
||
|
||
The registry is Git-versioned and hand-maintained at this milestone (per the
|
||
M5 design principle: no database until the research process demonstrates a
|
||
need for one). A registry entry's `stage`, `version`, and `status` fields
|
||
must agree with the corresponding paper's own `publication.yaml`; validating
|
||
that agreement is part of registering or updating any paper (see
|
||
`workplans/CR-WP-0002-research-facility-skeleton.md` task T03).
|
||
|
||
## 6. Validation
|
||
|
||
`scripts/validate_research_registry.py` checks that `research/registry/papers.yaml`
|
||
parses, that paper ids are unique, that each entry's path resolves and
|
||
contains a `publication.yaml`, that registry `stage`/`version`/`status`
|
||
agree with each paper's own `publication.yaml`, and that relative Markdown
|
||
links inside a paper's own files resolve. It is a single script, not a test
|
||
framework or package, because the artifact set at this milestone is a
|
||
handful of small, hand-authored files — a proportionate validation tool for
|
||
that scale. Its only dependency is PyYAML. Run it with:
|
||
|
||
```bash
|
||
python3 scripts/validate_research_registry.py
|
||
```
|
||
|
||
Run this after any change to the registry or to a paper's `publication.yaml`
|
||
or Markdown files, and before running the repository's Repo Manager sync.
|
||
|
||
## 7. What This Convention Does Not Cover
|
||
|
||
Consistent with the M0 non-goals, this convention does not define: a
|
||
database or service layer, an external publication workflow, a forum, a
|
||
reputation or scoring mechanism, or automated ID assignment tooling. IDs are
|
||
assigned by the author registering the artifact, by hand, following the
|
||
patterns above.
|