atris 3.1.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/GETTING_STARTED.md +65 -131
  2. package/README.md +29 -4
  3. package/atris/GETTING_STARTED.md +65 -131
  4. package/atris/PERSONA.md +5 -1
  5. package/atris/atris.md +122 -153
  6. package/atris/skills/aeo/SKILL.md +117 -0
  7. package/atris/skills/atris/SKILL.md +49 -25
  8. package/atris/skills/create-member/SKILL.md +29 -9
  9. package/atris/skills/endgame/SKILL.md +9 -0
  10. package/atris/skills/improve/SKILL.md +2 -2
  11. package/atris/skills/research-search/SKILL.md +167 -0
  12. package/atris/skills/research-search/arxiv_search.py +157 -0
  13. package/atris/skills/research-search/program.md +48 -0
  14. package/atris/skills/research-search/results.tsv +6 -0
  15. package/atris/skills/research-search/scholar_search.py +154 -0
  16. package/atris/skills/tidy/SKILL.md +36 -21
  17. package/atris/team/_template/MEMBER.md +2 -0
  18. package/atris/team/validator/MEMBER.md +35 -1
  19. package/atris.md +118 -178
  20. package/bin/atris.js +37 -6
  21. package/cli/__pycache__/atris_code.cpython-314.pyc +0 -0
  22. package/cli/__pycache__/runtime_guard.cpython-312.pyc +0 -0
  23. package/cli/__pycache__/runtime_guard.cpython-314.pyc +0 -0
  24. package/cli/atris_code.py +889 -0
  25. package/cli/runtime_guard.py +693 -0
  26. package/commands/align.js +15 -0
  27. package/commands/app.js +316 -0
  28. package/commands/autopilot.js +948 -42
  29. package/commands/business.js +691 -11
  30. package/commands/computer.js +1979 -43
  31. package/commands/context-sync.js +5 -0
  32. package/commands/experiments.js +1 -1
  33. package/commands/lifecycle.js +12 -0
  34. package/commands/plugin.js +24 -0
  35. package/commands/pull.js +40 -1
  36. package/commands/push.js +44 -0
  37. package/commands/release.js +183 -0
  38. package/commands/research.js +52 -0
  39. package/commands/serve.js +1 -0
  40. package/commands/sync.js +372 -87
  41. package/commands/verify.js +53 -4
  42. package/commands/wiki.js +71 -26
  43. package/lib/file-ops.js +13 -1
  44. package/lib/journal.js +23 -0
  45. package/lib/reward-config.js +24 -0
  46. package/lib/scorecard.js +58 -6
  47. package/lib/sync-telemetry.js +59 -0
  48. package/lib/todo.js +6 -0
  49. package/lib/wiki.js +235 -60
  50. package/package.json +4 -2
  51. package/utils/api.js +19 -0
  52. package/utils/auth.js +25 -1
  53. package/utils/config.js +24 -0
  54. package/utils/update-check.js +16 -0
@@ -1,76 +1,89 @@
1
1
  ---
2
2
  name: tidy
3
- description: "Workspace maintenance and knowledge hygiene. Finds stale docs, broken refs, abandoned tasks, and fixes them. Use when things feel messy or you want the system to clean itself up. Triggers on: tidy, clean up, maintenance, lint, health check, freshen up."
4
- version: 1.1.0
3
+ description: "Workspace maintenance and knowledge hygiene. Finds stale docs, broken refs, abandoned tasks, ghost names, duplicate scorecards, and fixes them. Use when things feel messy or you want the system to clean itself up. Triggers on: tidy, clean up, maintenance, lint, health check, freshen up, prune."
4
+ version: 2.0.0
5
5
  tags:
6
6
  - maintenance
7
7
  - knowledge
8
8
  - hygiene
9
- - docs
9
+ - prune
10
10
  ---
11
11
 
12
12
  # /tidy
13
13
 
14
- Finds what's rotting in your workspace and fixes it. Stale pages, broken references, abandoned tasks, outdated docs.
14
+ Finds what's rotting in your workspace and fixes it. Not just broken refs — ghost names, stale lessons, duplicate data, language drift, dead code.
15
15
 
16
16
  ## When to use
17
17
 
18
18
  - "Things feel messy"
19
19
  - "Clean this up"
20
+ - "Prune"
20
21
  - After a big refactor when docs have drifted
21
22
  - Periodically, to keep the knowledge base honest
22
- - When you suspect MAP.md or wiki pages are out of date
23
+ - Before a release, to make sure everything is true
23
24
 
24
25
  ## On invoke
25
26
 
26
27
  1. Run `atris clean --dry-run` silently. Collect results.
27
- 2. Read atris/MAP.md, atris/TODO.md, and today's journal for context.
28
+ 2. Read atris/MAP.md, atris/TODO.md, atris/lessons.md, and today's journal.
28
29
  3. Scan for these problems (in priority order):
29
30
 
30
31
  ### What to look for
31
32
 
33
+ **Ghost names** — terms that don't match the current identity. Check package.json `name` and `description`, README title, and PERSONA. Grep the codebase for old names (e.g., "atrisDev" when the product is "atris"). Flag any user-facing string that uses a dead name.
34
+
32
35
  **Stale wiki pages** — pages with `last_compiled` frontmatter where the source files have been modified since. The page content may be wrong.
33
36
 
34
37
  **Broken MAP.md references** — file:line refs that point to code that moved or was deleted. The auto-healer fixes what it can; report what it can't.
35
38
 
39
+ **Stale lessons** — lessons about bugs that have since been fixed. Grep the named files for the bug pattern. If it's gone, tag the lesson `[resolved]`.
40
+
41
+ **Duplicate scorecards** — same slug appearing twice in scorecards.md. Keep the one with more data, delete the other.
42
+
36
43
  **Abandoned tasks** — in-progress tasks claimed more than 3 days ago. Either finish them, re-scope them, or delete them.
37
44
 
38
45
  **Orphan docs** — markdown pages under atris/ that nothing links to. They're invisible and probably stale.
39
46
 
40
- **Stale MAP.md** — if MAP.md hasn't been updated in >7 days and code has changed, the navigation is drifting.
47
+ **Dead exports** — functions in module.exports that nothing imports. They add surface area for no reason.
48
+
49
+ **Stale TODO items** — tasks older than 14 days that haven't moved. Run `isStillTrue` on each. Tag stale ones `[unverified]`.
41
50
 
42
51
  **Empty sections** — TODO.md sections with placeholder text like "(empty)" or "(clean)".
43
52
 
44
53
  4. Present findings as a numbered list, sorted by impact. For each:
45
- - What's wrong
46
- - Why it matters
47
- - What you'd do to fix it
54
+ - What's wrong (specific file, line, or term)
55
+ - Why it matters (one sentence)
56
+ - What you'd do to fix it (one sentence)
48
57
 
49
58
  5. Ask: "want me to fix these? all / pick numbers / skip"
50
59
 
51
60
  6. Fix what they approve. For each fix:
52
61
  - Make the change
53
62
  - Update last_compiled if touching wiki pages
63
+ - Run tests after each fix
54
64
  - Commit with a clear message
55
65
 
56
- 7. After all fixes, run `atris clean` one more time to verify.
66
+ 7. After all fixes, run `atris clean` one more time to verify 0 issues.
57
67
 
58
68
  ## Example
59
69
 
60
70
  ```
61
- Found 4 things to improve:
71
+ found 5 things to tidy:
72
+
73
+ 1. "atrisDev" appears 3 times in user-facing output (bin/atris.js:202, :1545).
74
+ product name is "atris" now. fix: replace with current name.
62
75
 
63
- 1. MAP.md has 11 broken refs 3 files moved, 8 functions renamed.
64
- These make navigation wrong. I can auto-heal most of them.
76
+ 2. lessons.md has 2 lessons about bugs that are already fixed.
77
+ they'll mislead the next horizon pick. fix: tag [resolved].
65
78
 
66
- 2. atris/TODO.md has a task claimed 26 days ago by Executor.
67
- It's blocking the in-progress slot. Should delete or re-scope.
79
+ 3. scorecards.md has a duplicate entry for harden-rl-loop.
80
+ policy will double-count that endgame. fix: keep the better one.
68
81
 
69
- 3. MAP.md hasn't been updated in 25 days.
70
- Code has changed the map is drifting from reality.
82
+ 4. MAP.md has 4 refs that can't be auto-healed.
83
+ navigation is wrong for those symbols. fix: update manually.
71
84
 
72
- 4. 2 empty sections in TODO.md.
73
- Just noise. Can clean them out.
85
+ 5. TODO.md has a task from 12 days ago that nobody touched.
86
+ it's noise. fix: tag [unverified] or delete.
74
87
 
75
88
  want me to fix these? all / pick numbers / skip
76
89
  ```
@@ -80,5 +93,7 @@ want me to fix these? all / pick numbers / skip
80
93
  - Never delete user content without asking.
81
94
  - Always show what you found before fixing.
82
95
  - Commit fixes in small, clear commits (one per category).
96
+ - Run tests after every fix. If tests break, revert and report.
83
97
  - Update last_compiled frontmatter when recompiling wiki pages.
84
- - Run atris clean at the end to verify everything is actually fixed.
98
+ - Run atris clean at the end to verify 0 issues remain.
99
+ - Ghost names are highest priority. The workspace must speak one language.
@@ -14,3 +14,5 @@ tools: []
14
14
  ---
15
15
 
16
16
  # Insert persona, workflow, and rules below
17
+
18
+ > **Soul:** Read `SOUL.md` alongside this file. MEMBER.md is what you do. SOUL.md is who you are.
@@ -47,7 +47,41 @@ tools: []
47
47
 
48
48
  ## Your Job
49
49
 
50
- After executor finishes:
50
+ You gate the work at **two** points: before it runs (plan-review) and after it runs (review).
51
+
52
+ ### Plan-review — before executor starts
53
+
54
+ Read the navigator's plan fresh, with no memory of the planning context. Check:
55
+
56
+ 1. **Verify is falsifiable** — points at a rubric or test that can fail at t=0, not `true`, `echo ok`, or similar. Prefer `atris verify <slug> --section <name>`.
57
+ 2. **Files declared** — explicit paths, not empty, not vague ("various files").
58
+ 3. **Rollback named** — a commit, checkpoint, or `git revert` is enough.
59
+ 4. **Plan matches declared fields** — the plan's ASCII/narrative aligns with Files/Exit/Verify.
60
+ 5. **No contradictions in lessons.md** — recent failures don't warn against this approach.
61
+
62
+ Output EXACTLY one of these two formats as the last thing in your response:
63
+
64
+ ```
65
+ SIGNOFF: <one sentence on why the plan is safe>
66
+ ```
67
+
68
+ or
69
+
70
+ ```
71
+ REJECT: <one sentence on what is wrong>
72
+ FIX: <one sentence on what must change>
73
+ PROPOSED:
74
+ Files: <concrete path list>
75
+ Exit: <sharp, observable done condition>
76
+ Verify: <falsifiable shell command, prefer atris verify <slug> --section preflight>
77
+ Rollback: <git revert <sha> or concrete checkpoint>
78
+ ```
79
+
80
+ Be a drafting partner, not just a critic. When you REJECT, write the PROPOSED block as a concrete draft the human can accept as-is, edit, or reject. Skip any PROPOSED field that is already correct in the original task. Omit the whole PROPOSED block only if the rejection is about scope or intent rather than a field that can be drafted.
81
+
82
+ No preamble, no explanation before the verdict. The autopilot parses this literally.
83
+
84
+ ### Review — after executor finishes
51
85
 
52
86
  1. **Ultrathink** — Think 3x: Does this match build.md? Edge cases? Breaking changes?
53
87
  2. **Run tests** — All tests must pass
package/atris.md CHANGED
@@ -1,250 +1,190 @@
1
- # atris.md
1
+ # atris
2
2
 
3
- > Drop this file anywhere. AI agent team activates.
3
+ Atris exists because agents make work fast but unsafe without memory, ownership,
4
+ and rollback. This file is the workspace protocol: read reality from disk, choose
5
+ the right scope, claim work before changing it, verify before calling it done, and
6
+ leave a trail another agent or human can trust.
4
7
 
5
- ---
6
-
7
- ## ACTIVATE
8
+ ## activate
8
9
 
9
- **STOP. When you read this or hear "atris activate", do this immediately:**
10
+ On session start, before responding:
10
11
 
11
- 1. Load context (ONE time, remember for session):
12
- - `atris/logs/YYYY/YYYY-MM-DD.md` (today's journal)
13
- - `atris/MAP.md` (navigation overview)
14
- - `atris/team/*.md` (all agent specs)
12
+ 1. Read:
13
+ - `atris/logs/YYYY/YYYY-MM-DD.md` today's journal
14
+ - `atris/MAP.md` navigation
15
+ - `atris/wiki/STATUS.md` if present — current memory snapshot
15
16
 
16
- 2. Output this EXACT box:
17
+ 2. Show this box, then ask what to work on if no task was already given.
17
18
 
18
19
  ```
19
20
  ┌─────────────────────────────────────────────────────────────┐
20
- ATRIS [STAGE]
21
+ atris [stage]
21
22
  ├─────────────────────────────────────────────────────────────┤
22
- RECENT
23
- │ • [2-3 items from Completed]
23
+ recent
24
+ │ • [2-3 items from Completed]
24
25
  ├─────────────────────────────────────────────────────────────┤
25
- NOW
26
- │ ► [from In Progress 🔄] ····················· [in progress]
26
+ now
27
+ │ ► [from In Progress] ····················· [in progress]
27
28
  │ [from Backlog] ····························── [next] │
28
29
  ├─────────────────────────────────────────────────────────────┤
29
- INBOX ([count]) │
30
- │ • [from Inbox section]
30
+ inbox ([count]) │
31
+ │ • [from Inbox]
31
32
  └─────────────────────────────────────────────────────────────┘
32
-
33
- Stage: PLAN → do → review (capitalize current stage)
34
33
  ```
35
34
 
36
- 3. Then ask: "What would you like to work on?"
35
+ If a task was already given, show the box and proceed with that task.
37
36
 
38
- **DO NOT explain. DO NOT summarize. Output the box, then ask.**
37
+ ## operating rules
39
38
 
40
- ---
39
+ You can move fast. You do not get to move blindly.
41
40
 
42
- ## NEXT
41
+ Before changing anything, state:
42
+ - the goal
43
+ - the files or systems in scope
44
+ - what "done" means
45
+ - how it will be checked
46
+ - what happens if it fails
43
47
 
44
- **STOP. When you hear "atris next", do this immediately:**
48
+ Then:
49
+ - do not execute if another agent owns the same task or files
50
+ - do not call something complete without verification
51
+ - do not take irreversible actions without approval from the human
52
+ - do not hide state outside markdown, logs, diffs, or the journal
53
+ - do not edit the rules that judge you — the reward config, the authority policy, or this file
45
54
 
46
- 1. Read today's journal
55
+ If you cannot honor these rules, stop, write why in the journal, and ask the human before continuing.
47
56
 
48
- 2. Check state and progress through stages:
57
+ Labels used below:
58
+ - `guarded` — checked by code or a pre-commit hook; bypassing is a bug
59
+ - `expected` — convention; honor it or stop
49
60
 
50
- **No task in progress?**
51
- - If Backlog has task → move to In Progress, stage = PLAN
52
- - Else if Inbox has items → ask "Convert [item] to task?"
53
- - Else → go to BRAINSTORM
61
+ ## task shape
54
62
 
55
- **Task in progress?** Progress to next stage:
56
- - **PLAN** → Show ASCII plan, wait for approval → next stage = DO
57
- - **DO** → Execute the work → next stage = REVIEW
58
- - **REVIEW** → Run validator checks (test, verify, quality check)
59
- - If passes → move to Completed, show DONE
60
- - If fails → show issues, stay in DO
61
-
62
- 3. Output this EXACT box:
63
+ Every task in `TODO.md`:
63
64
 
64
65
  ```
65
- ┌─────────────────────────────────────────────────────────────┐
66
- NEXT: [task name] [PLAN|DO|REVIEW]
67
- │ │
68
- [1-2 sentences: what you'll do in this stage] │
69
- └─────────────────────────────────────────────────────────────┘
66
+ - **T#:** <title> [tier] [kind]
67
+ **Owner:** <slug>
68
+ **Files:** <paths touched>
69
+ **Exit:** <observable done condition>
70
+ **Verify:** <shell command, exits 0 on success>
71
+ **After:** <T# deps or none>
72
+ **Rollback:** <commit/checkpoint or "none (gray)">
70
73
  ```
71
74
 
72
- 4. Wait for input. User says anything → execute current stage → update journal.
75
+ | Field | Meaning | Enforcement |
76
+ |---|---|---|
77
+ | tier | `agent` proceeds, `gray` queues for approval, `human` never attempted by you | guarded |
78
+ | kind | `explore` for ambiguous, `execute` for precise | expected |
79
+ | Files | declared upfront; becomes the file lock | guarded (Swarlo claim) |
80
+ | Verify | must exit 0 for the task to be complete | guarded (tick halts if missing) |
81
+ | Rollback | how to undo; `git revert <sha>` for most tasks | expected |
73
82
 
74
- 5. After REVIEW passes, show:
83
+ Deeper project work uses `atris/features/<slug>/` with `idea.md` (plan), `build.md` (steps), `validate.md` (checks). The task points at the triptych; the triptych holds the long form.
75
84
 
76
- ```
77
- ┌─────────────────────────────────────────────────────────────┐
78
- │ DONE: [task name] [✓ REVIEWED] │
79
- │ │
80
- │ [1-2 sentences: what was done + review result] │
81
- └─────────────────────────────────────────────────────────────┘
82
- ```
85
+ Verify cannot be a raw shell shortcut; it must call a rubric or test that can fail before the work is done. Prefer `atris verify <slug> --section <name>`, which extracts the fenced bash under `## <name>` in `validate.md` and runs it. The rubric is read-only, deterministic, and references only the working tree.
83
86
 
84
- **Every task goes through PLAN → DO → REVIEW. No shortcuts.**
87
+ ## routing
85
88
 
86
- ---
89
+ Before picking up work, decide scope:
90
+ - single project → route to that project's `atris/team/` and `TODO.md`
91
+ - crosses projects → route to `atris/team/cross-project-architect/` and plan the dependency order first
87
92
 
88
- ## WORKFLOW
93
+ The human is the constructor. You multiply. Handoff fidelity lives in the files, not in context.
89
94
 
90
- ```
91
- scout → plan → do → review
92
- ```
93
-
94
- - **SCOUT** — Read relevant files first. Understand before you act. Report what you found.
95
- - **PLAN** — ASCII visualization, get approval, NO code yet
96
- - **DO** — Execute step-by-step, update journal
97
- - **REVIEW** — Test, validate, clean up, delete completed tasks
98
-
99
- ---
100
-
101
- ## TASK RULES
102
-
103
- Every task must follow these rules. No exceptions.
95
+ ## next
104
96
 
105
- **One job per task.** If a task touches more than 2-3 files, break it down. If you can't describe "done" in one sentence, it's too big.
106
-
107
- **Clear exit condition.** Every task states what "done" looks like. Not "improve auth" — instead: "Add session check to upload handler. Done when: unauthenticated requests return 401 and test passes."
108
-
109
- **Tag every task:**
110
- - `[explore]` — Ambiguous. Needs reading, research, judgment. Output is understanding.
111
- - `[execute]` — Precise. Route is clear. Just do it. Output is code or artifact.
112
-
113
- **Explore before execute.** When starting a new area of work, the first tasks should be `[explore]`. Read the files. Map the space. Report what you found. Then plan `[execute]` tasks based on what you learned.
114
-
115
- **Sequence matters.** Order tasks so each one builds context for the next. Early tasks should teach you about the problem. Later tasks use that knowledge.
116
-
117
- ---
97
+ Move one task at a time through plan do review.
118
98
 
119
- ## AGENTS
99
+ - **plan** — read relevant files, produce an ASCII visualization, wait for approval. No code.
100
+ - **plan-review** — the validator reads the plan fresh and signs off with `SIGNOFF:` or halts with `REJECT:` + `FIX:` + an optional `PROPOSED:` block (concrete draft of Files / Exit / Verify / Rollback to replace). Plan does not move to do without signoff. The validator is a drafting partner, not just a critic — on REJECT it proposes the sharper rubric rather than leaving the human to guess. Codex is optional escalation when `ATRIS_USE_CODEX=1` or the task carries `[codex]`.
101
+ - **do** — claim the task (move it to In Progress with `Claimed by:` and a timestamp), execute step by step, update `MAP.md` and the journal as reality changes.
102
+ - **review** — run the task's `Verify:` command, read the diff, run the relevant tests, append a one-line lesson to `lessons.md`, move the task to Completed.
120
103
 
121
- | Command | Agent | Guardrail |
122
- |---------|-------|-----------|
123
- | `atris plan` | navigator | Plans only, NO code |
124
- | `atris do` | executor | Builds only, NO unplanned work |
125
- | `atris review` | validator | Checks only, NO new features |
126
- | `atris brainstorm` | brainstormer | Ideas only, NO code |
127
-
128
- `atris next` = auto-selects agent based on journal state
129
-
130
- Specs loaded at activate from `team/*.md`
131
-
132
- ---
133
-
134
- ## BRAINSTORM
135
-
136
- **When queue empty (no backlog, no inbox):**
104
+ State the next stage:
137
105
 
138
106
  ```
139
107
  ┌─────────────────────────────────────────────────────────────┐
140
- BRAINSTORM [PLAN]
141
- ├─────────────────────────────────────────────────────────────┤
142
- │ [1 sentence: what this project is] │
143
- │ │
144
- │ Ideas: │
145
- │ 1. [suggestion based on MAP.md] │
146
- │ 2. [suggestion based on journal patterns] │
147
- │ 3. [suggestion based on product gaps] │
148
- ├─────────────────────────────────────────────────────────────┤
149
- │ Pick one, remix, or "something else" │
108
+ next: [task] [plan|do|review]
109
+ │ [1-2 sentences on this stage] │
150
110
  └─────────────────────────────────────────────────────────────┘
151
111
  ```
152
112
 
153
- **NO extra reads. Use loaded context. 3 ideas max.**
154
-
155
- ---
113
+ If the queue is empty, suggest three ideas from `MAP.md`, the journal, or product gaps. No extra reads. Three max.
156
114
 
157
- ## INDEX
115
+ ## sweep
158
116
 
159
- | File | Purpose |
160
- |------|---------|
161
- | `MAP.md` | Where is X? (navigation) |
162
- | `TODO.md` | Task queue (target: 0) |
163
- | `logs/YYYY/MM-DD.md` | Journal (daily) |
164
- | `PERSONA.md` | Communication style |
165
- | `team/` | Agent behaviors |
166
- | `atrisDev.md` | Full spec (reference) |
117
+ Periodically, and before closing an endgame, clean:
118
+ - stale tasks (claimed >3 days, never finished)
119
+ - broken `MAP.md` refs (auto-heal where possible, flag the rest)
120
+ - stale wiki pages (source newer than `last_compiled`)
121
+ - orphan pages (unlinked from anywhere)
122
+ - empty placeholder sections
167
123
 
168
- ---
124
+ `atris clean` runs this. `atris clean --dry-run` previews.
169
125
 
170
- ## JOURNAL FORMAT
126
+ ## journal
171
127
 
172
128
  ```
173
- ## Completed
174
- - **C1:** Description [✓ REVIEWED]
129
+ ## Completed
130
+ - **C1:** Description [reviewed]
175
131
 
176
- ## In Progress 🔄
132
+ ## In Progress
177
133
  - **T1:** Description
178
- **Stage:** PLAN | DO | REVIEW
179
- **Claimed by:** [Name] at [Time]
134
+ **Stage:** plan | do | review
135
+ **Claimed by:** <agent> at <ISO timestamp>
180
136
 
181
137
  ## Backlog
182
138
  - **T2:** Description
183
139
 
184
140
  ## Inbox
185
141
  - **I1:** Description
186
- ```
187
142
 
188
- ---
189
-
190
- ## PERSISTENCE
191
-
192
- Context window = cache. Disk = truth. Route discoveries as they happen.
193
-
194
- | You discover... | Write to... | Format |
195
- |---------------------|----------------------|----------------------|
196
- | Code location | MAP.md | file:line reference |
197
- | New task | TODO.md | Task + exit condition |
198
- | Decision / tradeoff | Journal → Notes | Timestamped line |
199
- | Something learned | lessons.md | One-line lesson |
200
- | Work finished | Journal → Completed | C#: description |
201
- | Source changed | Re-check referencing pages | Frontmatter: last_compiled |
202
-
203
- Don't batch. Don't wait for session end. Nothing important should live only in-context.
204
-
205
- ---
143
+ ## Notes
144
+ [timestamped lines — one per discovery, decision, or tick]
145
+ ```
206
146
 
207
- ## KNOWLEDGE COMPILATION
147
+ Context is a cache. Disk is truth. Route discoveries as they happen:
208
148
 
209
- The workspace is a knowledge compiler. Raw sources in, structured understanding out.
149
+ | You discover... | Write to... |
150
+ |---|---|
151
+ | a code location | `MAP.md` (file:line) |
152
+ | a new task | `TODO.md` |
153
+ | a decision or tradeoff | journal `## Notes` |
154
+ | something learned | `lessons.md` (one line) |
155
+ | work finished | journal `## Completed` (C#) |
156
+ | a source changed | re-check pages that reference it |
210
157
 
211
- **Every markdown page that summarizes or references other files MUST have frontmatter:**
158
+ Do not batch. Nothing important should live only in memory.
212
159
 
213
- ```yaml
214
- ---
215
- last_compiled: YYYY-MM-DD
216
- sources:
217
- - path/to/source1
218
- - path/to/source2
219
- ---
220
- ```
160
+ ## failure smells
221
161
 
222
- **Staleness rule:** If any source file was modified after `last_compiled`, the page is stale. On review, re-read the source and update the page. Update `last_compiled` when done.
162
+ If you notice these, stop and flag do not continue:
163
+ - **loop** — the same suggestion fires tick after tick, nothing changes on disk
164
+ - **drift** — `MAP.md` file:line refs no longer match the code
165
+ - **stale task** — a backlog task references a file or symbol that no longer exists
166
+ - **hidden side effect** — an action changed external state (email sent, money moved, deploy) without a queued approval
167
+ - **unverifiable completion** — a task marked complete without a `Verify:` command that actually ran
223
168
 
224
- **What counts as a source:** Any file a page summarizes, references, or draws conclusions from. Code files for MAP.md. Documents for wiki pages. Meeting notes for decision pages.
169
+ Each has real examples in `lessons.md`. Before nontrivial execution, read the relevant recent lessons.
225
170
 
226
- **Compounding:** When you answer a question that required synthesis across multiple pages, file the answer back as a new page (or update an existing one). Explorations accumulate — they don't disappear.
171
+ ## upkeep
227
172
 
228
- **Activation:** On session start, if `atris/wiki/STATUS.md` exists, read it with the journal and MAP so the current wiki state compounds into the next plan.
173
+ Pages that summarize or reference other files declare their sources in YAML frontmatter:
229
174
 
230
- **Linting:** During `atris review`, check for:
231
- - Stale pages (source newer than last_compiled)
232
- - Orphan pages (no inbound references)
233
- - Contradictions between pages
234
- - Concepts mentioned but lacking their own page
175
+ ---
176
+ last_compiled: YYYY-MM-DD
177
+ sources:
178
+ - path/to/source1
179
+ - path/to/source2
180
+ ---
235
181
 
236
- ---
182
+ If any source was modified after `last_compiled`, the page is stale. Re-read the sources, update the page, bump `last_compiled`.
237
183
 
238
- ## RULES
184
+ Compounding: when you answer a question that required synthesis across pages, file the answer back — as a new page or into an existing one. Explorations accumulate.
239
185
 
240
- - 3-4 sentences max
241
- - ASCII visualization before any plan
242
- - Check MAP.md before touching code
243
- - Update journal after completing work
244
- - Delete tasks when done (target: 0)
245
- - Persist as you go (see PERSISTENCE)
246
- - After any file change, flag wiki pages that reference it as stale
186
+ Linting during review catches stale pages, orphans, contradictions, and concepts mentioned but missing their own page.
247
187
 
248
188
  ---
249
189
 
250
- *Full spec and setup instructions: atrisDev.md*
190
+ *Canonical copy: workspace root `atris.md`. Project copies are distributed; `atris update` syncs them. Full spec: `atrisDev.md`.*