I2073 — A worker records an observation in one command
Register observation.recorded in share/events.yaml (emitted_by knowledge; requires task_id, kind, subject, statement, evidence) and add `knowledge observe --kind <friction|workaround|defect|drift|repetition> --subject <ref> [--evidence <ref>]... <statement>` to lib/knowledge.sh, writing one ledger line, refusing malformed input without writing, inside or outside a task, and only inside an open episode; write ADR 0118.
DONE wave 0 · p1 · implementation profile · runs alone
Part of a-session-leaves-what-it-observed — A session leaves what it observed, and the repository routes it.
Objective
Register observation.recorded in share/events.yaml (emitted_by knowledge; requires task_id, kind, subject, statement, evidence) and add `knowledge observe --kind <friction|workaround|defect|drift|repetition> --subject <ref> [--evidence <ref>]... <statement>` to lib/knowledge.sh, writing one ledger line, refusing malformed input without writing, inside or outside a task, and only inside an open episode; write ADR 0118.
Why
Friction is noticed by workers and written nowhere the repository reads; decision add is the precedent for one typed line per act.
Current state
No observation event or command exists; workers keep friction in private memory files.
Desired state
One command any provider can run inside an episode; one typed ledger line per observation.
Scope
- lib/knowledge.sh
- share/events.yaml
- share/commands.yaml
- docs/CLI.md
- docs/KNOWLEDGE.md
- docs/SCHEMAS.md
- docs/CLAIMS.yaml
- docs/claims
- docs/CONCEPTS.md
- .ai/repo/adrs
- test/cases/980_a_session_records_what_it_observed.sh
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- An observation inside an episode writes one line with kind, subject, statement, each evidence reference and the active task or none
- An unknown kind, a malformed subject or evidence reference, a multi-line statement or a transcript marker is refused with exit 2 and no line
- A subject is a repository path or capability:, rule:, command:, gate: followed by an identifier, and anything else is refused
- With no open episode the observation is refused with exit 10 naming session start, and nothing is written
Validation
- bash test/run.sh 980_a_session_records_what_it_observed
- bash test/run.sh 33_event_registry
Evidence required
- observation_recorded
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| observation_recorded | test | MJ_TEST_JOBS=2 bash test/run.sh 980_a_session_records_what_it_observed 33_event_registry | tests: 2 passed, 0 failed, 0 skipped (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59) | ce5959d |
Timeline
- started
- 2026-10-14T08:01:27Z
- verified
- —
- completed
- 2026-10-14T08:01:33Z
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2073.yaml. Read it back with majordomus plan show I2073.