atris 3.1.0 → 3.2.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.
package/README.md CHANGED
@@ -83,7 +83,7 @@ cd ~/arena/atris-business/blondish
83
83
  atris align --fix
84
84
  ```
85
85
 
86
- That creates the cloud business, writes `.atris/business.json`, and scaffolds the canonical local `atris/` workspace under `~/arena/atris-business/<slug>/`.
86
+ That creates the cloud business, writes `.atris/business.json`, initializes `.atris/state/` for events, episodes, and scorecards, and scaffolds the local `atris/` workspace under `~/arena/atris-business/<slug>/` with starter team lanes, a default recap artifact, and a first-loop starter queue in `atris/TODO.md`.
87
87
 
88
88
  If you already have a folder full of source material, run it from there with `atris business init "BLOND:ISH" --here`.
89
89
 
@@ -111,6 +111,7 @@ If you already have a folder full of source material, run it from there with `at
111
111
 
112
112
  - `atris learn` stores structured project memory in `atris/learnings.jsonl`
113
113
  - `atris wiki` keeps repo memory in `atris/wiki/` by default, with `--cloud` when you want the remote workspace path
114
+ - `atris wiki --private` uses `.atris/presidio/` for local-only sensitive notes and operating memory
114
115
  - `atris loop` refreshes `atris/wiki/STATUS.md` and `atris/wiki/log.md`, flags stale/orphan pages, and suggests the next ingest
115
116
  - `atris activate` loads the current wiki status so the next session starts with project memory, not just tasks
116
117
  - `atris experiments` runs Karpathy-style keep/revert loops in `atris/experiments/`
@@ -121,7 +122,7 @@ If you already have a folder full of source material, run it from there with `at
121
122
  Under the hood, Atris can keep score on real repo work.
122
123
 
123
124
  - Endgame tasks can carry a `Verify:` command, so work can end on a deterministic check instead of pure prose.
124
- - `atris autopilot` can run that check after review, record a reward in the journal, and append a scorecard when a horizon closes.
125
+ - `atris autopilot` can run that check after review, record a reward in the journal, and append a local scorecard when a horizon closes.
125
126
  - Future horizon picks can weight against recent scorecards, so the loop learns from repo-local history without claiming model retraining.
126
127
 
127
128
  ## Benchmark Harness
@@ -178,6 +179,14 @@ atris skill link [--all]
178
179
 
179
180
  For Codex, copy any skill folder into `~/.codex/skills/`.
180
181
 
182
+ ## v3.2.0
183
+
184
+ - **Staleness gate** — tasks tagged `[unverified]` are skipped at the moment of use, not pruned eagerly. Three-state model: actionable / unverified / deleted.
185
+ - **Lesson gate** — `isLessonResolved` checks whether a lesson already shipped before proposing new horizons from it. Prevents the loop from re-solving solved problems.
186
+ - **`atris release`** — new command: tags the version, bumps package.json, creates a GitHub release, and drafts a `/launch` post in one shot.
187
+ - **Shell injection fix** — `checkStaleness` switched from `execSync` string interpolation to `execFileSync` with args arrays. Markdown-derived content (task titles, inbox items) no longer reaches a shell.
188
+ - **Codex hardening** — `atris activate` and `atris` entry point detect Codex environments and write `AGENTS.md` so Codex sessions start with workspace context.
189
+
181
190
  ## Update
182
191
 
183
192
  ```bash
@@ -23,7 +23,7 @@ This is the product. The thing the user pays for. One call, one verifiable resul
23
23
  → POST /api/improve { workspace: ".", mode: "full" }
24
24
  → backend picks a task, plans, builds, reviews, verifies
25
25
  → returns { task, reward, files_changed, verify_pass, summary }
26
- → CLI writes scorecard to atris/scorecards.md
26
+ → CLI writes scorecard to .atris/presidio/scorecards.md
27
27
  → CLI reports result to user
28
28
  ```
29
29
 
@@ -45,7 +45,7 @@ The inference is Claude Code (or whatever model the backend uses). The environme
45
45
  5. On success:
46
46
  - Show what shipped (task name, files changed, verify result)
47
47
  - Show the reward score
48
- - Write scorecard to `atris/scorecards.md`
48
+ - Write scorecard to `.atris/presidio/scorecards.md`
49
49
  - Append tick to today's journal
50
50
  6. On failure:
51
51
  - Show the error
package/bin/atris.js CHANGED
@@ -237,6 +237,7 @@ function showHelp() {
237
237
  console.log(' search - Search journal history (atris search <keyword>)');
238
238
  console.log(' clean - Housekeeping (stale tasks, archive journals, broken refs)');
239
239
  console.log(' verify - Validate work is done (tests, MAP.md, changes)');
240
+ console.log(' release - Tag release, bump version, create GitHub release, draft /launch');
240
241
  console.log(' learn - Project learnings (patterns, pitfalls, preferences)');
241
242
  console.log(' ingest - Local-first wiki ingest into atris/wiki/');
242
243
  console.log(' query - Local-first wiki query against atris/wiki/');
@@ -424,7 +425,7 @@ const { planAtris: planCmd, doAtris: doCmd, reviewAtris: reviewCmd } = require('
424
425
  // All other commands are lazy-loaded inline (require() only when invoked)
425
426
 
426
427
  // Check if this is a known command or natural language input
427
- const knownCommands = ['init', 'log', 'status', 'analytics', 'visualize', 'brainstorm', 'autopilot', 'run', 'plan', 'do', 'review',
428
+ const knownCommands = ['init', 'log', 'status', 'analytics', 'visualize', 'brainstorm', 'autopilot', 'run', 'plan', 'do', 'review', 'release',
428
429
  'activate', '_activate', 'agent', 'chat', 'console', 'login', 'logout', 'whoami', 'switch', 'use', 'accounts', '_resolve', '_profile-email', '_switch-session', 'shell-init', 'update', 'upgrade', 'version', 'help', 'next', 'atris',
429
430
  'clean', 'verify', 'search', 'skill', 'member', 'learn', 'plugin', 'experiments', 'pull', 'push', 'align', 'terminal', 'diff', 'business', 'sync',
430
431
  'ingest', 'query', 'lint', 'loop',
@@ -1002,6 +1003,11 @@ if (command === 'init') {
1002
1003
  } else if (command === 'verify') {
1003
1004
  const taskId = process.argv[3] || null;
1004
1005
  require('../commands/verify').verifyAtris(taskId);
1006
+ } else if (command === 'release') {
1007
+ const dryRun = process.argv.includes('--dry-run');
1008
+ require('../commands/release').releaseAtris({ dryRun })
1009
+ .then(() => process.exit(0))
1010
+ .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
1005
1011
  } else if (command === 'search') {
1006
1012
  const keyword = process.argv.slice(3).join(' ');
1007
1013
  searchJournal(keyword);