atris 3.80.1 → 3.82.1
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/LICENSE +21 -0
- package/README.md +10 -0
- package/atris/atris.md +14 -0
- package/atris/features/README.md +15 -0
- package/atris/policies/README.md +24 -0
- package/atris/skills/README.md +61 -45
- package/atris/skills/design/SKILL.md +6 -5
- package/atris/skills/taste/SKILL.md +39 -0
- package/atris/skills/taste/notes.md +29 -0
- package/atris/skills/taste/principles.md +23 -0
- package/atris/skills/wiki/SKILL.md +14 -2
- package/atris/skills/wiki/index-lines.md +30 -0
- package/atris/skills/wiki/measure.md +20 -0
- package/atris/skills/wiki/note-shape.md +16 -0
- package/atris/skills/wiki/upkeep.md +16 -0
- package/atris/team/README.md +38 -0
- package/atris.md +14 -0
- package/bin/atris.js +1 -1
- package/commands/activate.js +1 -1
- package/commands/autoland.js +25 -26
- package/commands/autopilot-front.js +46 -1
- package/commands/autopilot.js +55 -25
- package/commands/clean.js +22 -11
- package/commands/computer.js +1 -1
- package/commands/doc-health.js +48 -1
- package/commands/improve.js +16 -3
- package/commands/init.js +4 -0
- package/commands/integrations.js +69 -1616
- package/commands/mission.js +109 -13
- package/commands/release.js +41 -10
- package/commands/status.js +1 -1
- package/commands/sync.js +12 -8
- package/commands/task.js +144 -118
- package/commands/unknowns.js +9 -5
- package/commands/visualize.js +1 -12
- package/commands/workflow.js +4 -3
- package/commands/worktree.js +68 -1602
- package/commands/xp.js +23 -2113
- package/commands/youtube.js +192 -3110
- package/lib/business-core.js +3 -4
- package/lib/campaign-run-lock.js +12 -1
- package/lib/engine-ask.js +1 -1
- package/lib/engine-receipt-sweep.js +64 -0
- package/lib/file-lock.js +175 -0
- package/lib/fleet.js +1 -1
- package/lib/integrations-core.js +1695 -0
- package/lib/json-file.js +22 -1
- package/lib/loop-doctor.js +36 -2
- package/lib/map-refs.js +68 -8
- package/lib/member-engine.js +1 -1
- package/lib/member-map-fold.js +49 -11
- package/lib/member-map-inbox.js +2 -1
- package/lib/mission-core.js +9 -2
- package/lib/recall-exam.js +171 -0
- package/lib/roster-markdown.js +2 -2
- package/lib/runner-command.js +5 -5
- package/lib/task-db.js +105 -37
- package/lib/taste-notes.js +35 -0
- package/lib/team-lineup.js +3 -3
- package/lib/todo.js +2 -0
- package/lib/wiki.js +11 -3
- package/lib/worktree-core.js +1517 -0
- package/lib/xp-core.js +2172 -0
- package/lib/youtube-core.js +3178 -0
- package/lib/zen-apply.js +3 -1
- package/package.json +2 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Atris Labs, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -20,6 +20,16 @@ Atris gives Claude Code, Codex, Cursor and any other agent a memory that lasts a
|
|
|
20
20
|
|
|
21
21
|
Mem0, Zep and Letta remember the users of a chat app. Atris remembers the project. Guide and comparison: https://atris.ai/blog/memory-for-coding-agents
|
|
22
22
|
|
|
23
|
+
## Check what ChatGPT can read about your business
|
|
24
|
+
|
|
25
|
+
`atris aeo scan` checks whether ChatGPT, Claude, Perplexity and other answer engines can read your site. No login needed.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx -y atris aeo scan yoursite.com --vs competitor.com
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
You get a score out of 100, each gap with its fix, a side-by-side score against a competitor, and a draft `llms.txt` you can publish. To see what ChatGPT actually says when buyers ask about your business, run the free check at https://atris.ai/aeo/check.
|
|
32
|
+
|
|
23
33
|
## Quick Start
|
|
24
34
|
|
|
25
35
|
```bash
|
package/atris/atris.md
CHANGED
|
@@ -87,10 +87,24 @@ If you cannot honor these rules, stop, write why in the journal, and ask the hum
|
|
|
87
87
|
|
|
88
88
|
Labels: `guarded` (checked by code or hook; bypassing is a bug) and `expected` (convention; honor it or stop).
|
|
89
89
|
|
|
90
|
+
## memory
|
|
91
|
+
|
|
92
|
+
Knowledge lives in small linked notes. Each area has a one-screen index whose lines say when to open the note behind them. Read the index for your area and open only what your work touches (`expected`). Skip any file this project does not have.
|
|
93
|
+
|
|
94
|
+
- Rules for reviewing work and for anything sent outside: `atris/policies/README.md`. Open it before you review, email or publish.
|
|
95
|
+
- How to do a recurring job: `atris/skills/README.md`. Open it when a task sounds like a skill or you need a process.
|
|
96
|
+
- Who owns what and how each member works: `atris/team/README.md`. Open it before you hand off or act as a member.
|
|
97
|
+
- Feature plans, specs and proofs: `atris/features/README.md`. Open it before you build a planned feature.
|
|
98
|
+
- Mistakes already made and the rule each one left: `atris/lessons.md`. Search it for your task words before risky or repeated work.
|
|
99
|
+
- Project facts and decisions: `atris/wiki/index.md`. Open it when the question is about the project, not the code.
|
|
100
|
+
- How to write or reorganize these notes: `atris/skills/wiki/SKILL.md`. Open it before you add a note or an index line.
|
|
101
|
+
|
|
90
102
|
## taste
|
|
91
103
|
|
|
92
104
|
What you ship should not read as generated. If someone would believe an AI made it at a glance, that is the bug.
|
|
93
105
|
|
|
106
|
+
- **Read the taste first.** Before making anything a person will see, read `atris/taste/TASTE.md` in this project and `~/.atris/taste/TASTE.md` in the person's home folder, whichever exist, project first. Each is a one-screen list whose lines link to short notes you open only when your work touches them. `atris/skills/taste/SKILL.md` says how to read and keep them; write corrections into those taste files, never into the skill (`expected`).
|
|
107
|
+
|
|
94
108
|
- **Gate it.** `atris slop detect <path>` is deterministic: exit 1 on a tell (file:line + rule), built for CI and review (`guarded`).
|
|
95
109
|
- **Name the move.** Direct with craft words: vertical rhythm, negative space, hierarchy, contrast, restraint.
|
|
96
110
|
- **Refuse the wells:** purple/indigo gradients, gradient-filled text, glassmorphism, Inter/Roboto defaults, claude-beige, neon-on-dark, hero-metric rows, identical card grids, eyebrow/tracked-caps labels, pulsing live-dots, em dashes.
|
package/atris/features/README.md
CHANGED
|
@@ -4,6 +4,21 @@ This directory contains feature documentation for the Atris project.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Open the right spec
|
|
8
|
+
|
|
9
|
+
Each line says what the feature decided and when to open its folder. A folder holds `idea.md` for why, `build.md` for how and `validate.md` for the proof.
|
|
10
|
+
|
|
11
|
+
- Campaigns are long goals worked by missions until a judge that fails today passes. The design is settled and not built. Open [campaign](campaign/idea.md) before you build or change campaign work.
|
|
12
|
+
- An agent cannot pass a tick with a check that proves nothing. A task's verify must be a rubric that fails before the work. Open [verify-falsifiability](verify-falsifiability/idea.md) when you touch how a task is verified.
|
|
13
|
+
- The validator reads every plan fresh and signs off before anything runs. Open [plan-review-by-validator](plan-review-by-validator/idea.md) when you change the plan to do handoff.
|
|
14
|
+
- An overnight runner that survives a bad tick and reports what it did. Open [spaceship](spaceship/idea.md) when you build long unattended runs.
|
|
15
|
+
- A public benchmark to prove a coordinated stack beats one pinned model. Open [endstate](endstate/idea.md) when you run or score that benchmark.
|
|
16
|
+
- Sync makes the safe path the default: review each conflict, clean cloud orphans, push only what changed. Open [cloud-sync-simplicity](cloud-sync-simplicity/idea.md) when you change sync or push.
|
|
17
|
+
- A business workspace syncs its brain folder, not raw files. Open [company-brain-sync](company-brain-sync/idea.md) when you work on business workspace sync.
|
|
18
|
+
- Atris picks the mission and writes the goal that the Codex runtime shows. Open [codex-goal-replacement](codex-goal-replacement/idea.md) when you touch the Codex goal bridge.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
7
22
|
## Structure
|
|
8
23
|
|
|
9
24
|
Each feature gets its own folder:
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Policies
|
|
2
|
+
|
|
3
|
+
How finished work is judged. Each line gives the rule and says when to open the policy behind it. A skill says how to do a job and its policy says how to review it.
|
|
4
|
+
|
|
5
|
+
## Before anything leaves the building
|
|
6
|
+
|
|
7
|
+
- Never send raw source to a person. HTML, decks and screenshots need render proof and the exact recipient, subject and body shown before send. Open [outbound-artifact-gate.md](outbound-artifact-gate.md) before you email, post or share anything.
|
|
8
|
+
- Generic, hedging output fails. Cut the kill-list words, match the depth to the task and run the pre-flight checklist. Open [ANTISLOP.md](ANTISLOP.md) when you review any writing, code comments or plans.
|
|
9
|
+
- An essay or post needs a clear thesis, sections that move it forward and a read out loud. Open [writing.md](writing.md) when you review long-form writing before it is published.
|
|
10
|
+
- Messages from the day loop must come from real operator data and never guess mood from silence. Open [day-loop-voice.md](day-loop-voice.md) when you write morning, evening or ping messages to an operator.
|
|
11
|
+
|
|
12
|
+
## Building
|
|
13
|
+
|
|
14
|
+
- Keep backend code plain: names that show intent, abstractions that earn their keep and plain error handling. Open [atris-backend.md](atris-backend.md) when you build or review an API, service or data access.
|
|
15
|
+
- Every technical choice should be better, faster, stronger, simpler and cheaper. Each one leaves a receipt. Open [engineering-principles.md](engineering-principles.md) when you weigh an architecture choice or a new tool.
|
|
16
|
+
|
|
17
|
+
## How things should look and feel
|
|
18
|
+
|
|
19
|
+
- Avoid the generic generated look in fonts, color, layout and motion. Open [atris-design.md](atris-design.md) when you build or review a screen.
|
|
20
|
+
- The Atris visual identity in type, color, spacing and motion came from a design interview. Open [design-seed.md](design-seed.md) when you style an Atris surface.
|
|
21
|
+
- Advanced technology made calm: help without possession and proactivity that is earned. Open [product-design-principles.md](product-design-principles.md) when you decide how a product feature should behave for a person.
|
|
22
|
+
- Atris must protect the person who says it is wrong. Open [genesis.md](genesis.md) when a decision touches power, dissent or what Atris is for.
|
|
23
|
+
|
|
24
|
+
How the people you work for like things to look and read lives in their taste files. [../skills/taste/SKILL.md](../skills/taste/SKILL.md) says where they are.
|
package/atris/skills/README.md
CHANGED
|
@@ -23,51 +23,67 @@ cp -r atris/skills/[name] ~/.codex/skills/
|
|
|
23
23
|
|
|
24
24
|
## Available Skills
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
26
|
+
Each line says what the skill does and when to open it. A skill with a review policy names it after the link.
|
|
27
|
+
|
|
28
|
+
### Working in a workspace
|
|
29
|
+
|
|
30
|
+
- Find files through MAP.md, check tasks and answer where-is-X questions. Open [atris](atris/SKILL.md) when you start in an Atris repo. Policy: `policies/ANTISLOP.md`.
|
|
31
|
+
- Where the taste of the people you work for lives and how to keep it. Open [taste](taste/SKILL.md) before you make copy, pages, buttons or decks.
|
|
32
|
+
- Keep project memory as small linked notes: ingest, query, lint and reorganize. Open [wiki](wiki/SKILL.md) when you save knowledge or a note has grown too big.
|
|
33
|
+
- Search past journals and decisions. Open [memory](memory/SKILL.md) when someone asks what happened before or why.
|
|
34
|
+
- Clean stale docs, broken refs and abandoned tasks. Open [tidy](tidy/SKILL.md) when the workspace feels messy.
|
|
35
|
+
- A working method for daily-driver models. Open [fable-method](fable-method/SKILL.md) before a long multi-step task or when work feels shallow.
|
|
36
|
+
- Self-checks and how to split work across parallel members. Open [meta](meta/SKILL.md) when you are stuck or coordinating a team. Policy: `atris/lessons.md`.
|
|
37
|
+
- Turn a task into the deeper version a top professional would do. Open [ambitious](ambitious/SKILL.md) before you start a task that matters.
|
|
38
|
+
|
|
39
|
+
### Running the loop
|
|
40
|
+
|
|
41
|
+
- Run one plan, do and review tick on its own. Open [autopilot](autopilot/SKILL.md) when you should ship the next thing without asking.
|
|
42
|
+
- Schedule the recurring autopilot heartbeat. Open [loop](loop/SKILL.md) before you set up anything that fires on a timer.
|
|
43
|
+
- One verified, scored improvement tick with a receipt. Open [improve](improve/SKILL.md) when asked to make something better and prove it.
|
|
44
|
+
- A keep or revert experiment loop for experiment packs. Open [autoresearch](autoresearch/SKILL.md) when you tune a prompt or tool against a score.
|
|
45
|
+
- A long goal with a judge that fails today, a budget and seats. Open [campaigns](campaigns/SKILL.md) only when the path is unknown and takes many tries.
|
|
46
|
+
- Pick the next horizon and write the reverse path as tasks. Open [endgame](endgame/SKILL.md) when the queue is empty or direction is unclear.
|
|
47
|
+
- An all-day operating partner that tracks identity, goals and live status. Open [flow](flow/SKILL.md) at the start of a work session.
|
|
48
|
+
- Wake a member by name and run one closed tick. Open [wake](wake/SKILL.md) when someone says gm or wake up to a member.
|
|
49
|
+
- Send work to another terminal agent or engine profile. Open [engines](engines/SKILL.md) when a job should run on a different model or tool.
|
|
50
|
+
- Create and manage MEMBER.md team members. Open [create-member](create-member/SKILL.md) when you add a new role to the team.
|
|
51
|
+
|
|
52
|
+
### Making things
|
|
53
|
+
|
|
54
|
+
- Frontend rules that keep a screen from looking generated. Open [design](design/SKILL.md) when you build or review UI. Policy: `policies/atris-design.md`.
|
|
55
|
+
- Backend rules that keep code simple. Open [backend](backend/SKILL.md) when you build an API or service. Policy: `policies/atris-backend.md`.
|
|
56
|
+
- Essay process with gates. Open [writing](writing/SKILL.md) when you draft an essay or long post. Policy: `policies/writing.md`.
|
|
57
|
+
- Find and fix generated-sounding writing. Open [copy-editor](copy-editor/SKILL.md) when you edit a draft before it ships.
|
|
58
|
+
- Content written to get cited by AI answer engines. Open [aeo](aeo/SKILL.md) when a page should show up in AI answers.
|
|
59
|
+
- Write a release post. Open [launch](launch/SKILL.md) after a release ships.
|
|
60
|
+
- Author Atris block documents: docs, decks and reports. Open [blocks](blocks/SKILL.md) when you write a doc for the Atris editor.
|
|
61
|
+
- Build and deploy an Atris app from a description. Open [create-app](create-app/SKILL.md) when someone wants a new app or workflow.
|
|
62
|
+
- View, manage and trigger Atris apps. Open [apps](apps/SKILL.md) when asked about an existing app or its runs.
|
|
63
|
+
- Security reviews and full audits through the sentinel. Open [security-audit](security-audit/SKILL.md) when you review code for holes or triage a vulnerability.
|
|
64
|
+
- Audit and improve skills against the skill guide. Open [skill-improver](skill-improver/SKILL.md) when you create or fix a skill.
|
|
65
|
+
|
|
66
|
+
### Research and learning
|
|
67
|
+
|
|
68
|
+
- Research sweep across papers, code and the web. Open [research-search](research-search/SKILL.md) when you need the latest work on a topic.
|
|
69
|
+
- YouTube search, notes and learning. Open [youtube](youtube/SKILL.md) when you get a video link or need videos on a topic.
|
|
70
|
+
- Search posts on X. Open [x-search](x-search/SKILL.md) for social listening. It costs credits.
|
|
71
|
+
|
|
72
|
+
### Connected accounts
|
|
73
|
+
|
|
74
|
+
- Gmail: read, send and archive. Open [email-agent](email-agent/SKILL.md) when you handle email.
|
|
75
|
+
- Inbox triage that scores, drafts and archives. Open [magic-inbox](magic-inbox/SKILL.md) when asked to clear an inbox.
|
|
76
|
+
- Google Calendar. Open [calendar](calendar/SKILL.md) for schedules and meetings.
|
|
77
|
+
- Google Drive, Docs and Sheets. Open [drive](drive/SKILL.md) for files and spreadsheets.
|
|
78
|
+
- Google Slides. Open [slides](slides/SKILL.md) for decks.
|
|
79
|
+
- Slack. Open [slack](slack/SKILL.md) for team messages.
|
|
80
|
+
- Notion. Open [notion](notion/SKILL.md) for pages and databases.
|
|
81
|
+
- GitHub. Open [github](github/SKILL.md) for pull requests, issues and CI.
|
|
82
|
+
- Local macOS iMessage. Open [imessage](imessage/SKILL.md) to read or send texts from the Mac.
|
|
83
|
+
- Ramp card and spend. Open [ramp](ramp/SKILL.md) for expenses and burn.
|
|
84
|
+
- Render deploys and logs. Open [render-cli](render-cli/SKILL.md) for Render services.
|
|
85
|
+
- Quote a purchase or stock order that the person approves first. Open [commerce](commerce/SKILL.md) when asked to buy or trade.
|
|
86
|
+
- Submit and triage customer feedback. Open [atris-feedback](atris-feedback/SKILL.md) for the feedback queue.
|
|
71
87
|
|
|
72
88
|
## ClawHub (External Distribution)
|
|
73
89
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design
|
|
3
3
|
description: Frontend aesthetics policy. Use when building UI, components, landing pages, dashboards, or any frontend work. Prevents generic ai-generated look.
|
|
4
|
-
version: 3.2.
|
|
4
|
+
version: 3.2.19
|
|
5
5
|
allowed-tools: Read, Write, Edit, Bash, Glob
|
|
6
6
|
tags:
|
|
7
7
|
- design
|
|
@@ -10,6 +10,8 @@ tags:
|
|
|
10
10
|
|
|
11
11
|
# atris-design
|
|
12
12
|
|
|
13
|
+
Start with the taste files that [../taste/SKILL.md](../taste/SKILL.md) points to for what the people you work for like. This file holds the full visual rules for building it.
|
|
14
|
+
|
|
13
15
|
The taste organ of the Atris system. Opinionated: these are Keshav's principles, not general best practices. Prevents ai-generated frontend from looking generic, and improves itself (see "self-improve" at the bottom, it is part of the job, not optional).
|
|
14
16
|
|
|
15
17
|
Canonical home: `atris-cli/atris/skills/design/SKILL.md` (this file, git-tracked). `atris sync` stamps it into every workspace's `atris/skills/` and `.claude/skills/`. Edit HERE, never a downstream copy: sync will clobber anything written elsewhere.
|
|
@@ -117,8 +119,8 @@ Every entry: id, rule, detector, status. A detector is a regex/command a gate ca
|
|
|
117
119
|
| D14 | compact selectors lead with the chosen name and a discriminating icon; remove redundant field labels and visible type explanations when icon, title, and accessible label carry them | judgment | active |
|
|
118
120
|
| D15 | copy density on landing pages: hero lede one sentence, one sentence per feature card, one line per FAQ answer, legal in one short footer paragraph; a section paragraph past ~40 words gets cut or moved one click deep (Keshav 2026-09-01: "SO much blabber yap text. keep it clean") | `<p>` in landing html over 60 words flags; otherwise judgment | active |
|
|
119
121
|
| D16 | verify mobile with real device emulation (Playwright iPhone profile, WebKit for iOS), never headless Chrome --window-size: Chrome floors the window at 500px wide and renders a fake layout (caught 2026-09-01: two "passing" screenshots hid a broken phone nav) | command scan for `--window-size=3` or `--window-size=4` in verify scripts | active |
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
+
| D33 | first viewport restraint: one dominant idea, at most one secondary live region, and everything else behind progressive disclosure; reject permanent three-column cockpit density as default SaaS structure | judgment | active |
|
|
123
|
+
| D35 | one alignment contract per component: wrapper, metadata, controls, and rendered content share the same width and inset source at every viewport | judgment | active |
|
|
122
124
|
| D17 | responsive corrections must test every disclosed state immediately below, at, and above each breakpoint; a fixed bug cannot reappear when a panel opens or the container narrows | judgment | promoted |
|
|
123
125
|
| D18 | no eyebrow metadata or tiny titles: important names become readable headings; indices, platform type names, and generator metadata stay off product surfaces | judgment | promoted |
|
|
124
126
|
| D19 | bubbly flat UI means one generous rounded parent, flat content-rail rows, and circular controls with a real action or stable identity; never round every nested child | judgment | active |
|
|
@@ -135,8 +137,8 @@ Every entry: id, rule, detector, status. A detector is a regex/command a gate ca
|
|
|
135
137
|
| D30 | a floating rounded composer inherits the page canvas; never paint a full-width contrast band behind it unless that band is intentional chrome | judgment | active |
|
|
136
138
|
| D31 | developer-only overlays stay off the product surface by default; any temporary visible launcher must have an immediate dismiss control | judgment | active |
|
|
137
139
|
| D32 | before changing repeated UI copy, verify the operator's exact executable and surface; matching labels do not prove the installed app, dev app, header, and composer share one live path | judgment | active |
|
|
138
|
-
|
|
139
140
|
| D34 | engine settings show only the selected engine’s effective model and supported controls; preserve saved choices missing from the option list instead of displaying another engine | `node scripts/test-engine-settings.mjs` in project-obelisk | graduated (engine settings regression) |
|
|
141
|
+
| D36 | marketing front pages: headline + one 2-line paragraph + buttons per section, card copy max 2 sentences, long artifacts live one click deep (Keshav 2026-08-31 "aggressive amounts of texts still", inspiration Oscar/Headway) | judgment | active |
|
|
140
142
|
|
|
141
143
|
Measured recipes live in the mimic studies: `~/arena/mimic-beautiful-ui/LESSONS.md` (18 AI-interface components with exact tokens) and its `remix.css` :root block (the portable Atris token sheet, coffee + paper themes). Start there before designing an agent surface.
|
|
142
144
|
|
|
@@ -178,4 +180,3 @@ This skill compounds or it dies. The contract, every frontend session:
|
|
|
178
180
|
- Full policy: `atris/policies/atris-design.md`
|
|
179
181
|
- Navigation: `atris/MAP.md`
|
|
180
182
|
- Workflow: `atris/PERSONA.md`
|
|
181
|
-
| D15 | marketing front pages: headline + one 2-line paragraph + buttons per section, card copy max 2 sentences, long artifacts live one click deep (Keshav 2026-08-31 "aggressive amounts of texts still", inspiration Oscar/Headway) | judgment | active |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: taste
|
|
3
|
+
description: How an agent finds and keeps the taste of the people it works for. Use before making copy, pages, buttons, decks or anything a person will see. Also use it whenever someone corrects how something looks or reads.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
tags:
|
|
6
|
+
- taste
|
|
7
|
+
- design
|
|
8
|
+
- copy
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Taste
|
|
12
|
+
|
|
13
|
+
Taste is how the people you work for like things to look and read. It is personal. It never lives in this skill. This skill says where to find it and how to keep it.
|
|
14
|
+
|
|
15
|
+
## Read it before you make anything a person will see
|
|
16
|
+
|
|
17
|
+
1. `atris/taste/TASTE.md` in this project, if it exists. It holds this project's brand and voice.
|
|
18
|
+
2. `~/.atris/taste/TASTE.md` in the person's home folder, if it exists. It holds their own taste across all their projects.
|
|
19
|
+
|
|
20
|
+
When the two disagree, the project file wins for work in that project. When neither exists, use the general rules in [principles.md](principles.md) and ask before you guess at a brand.
|
|
21
|
+
|
|
22
|
+
Each file is a one-screen list. Every line gives the rule and links to a short note with the reason and real examples. Open a note only when your work touches it.
|
|
23
|
+
|
|
24
|
+
## Keep it alive
|
|
25
|
+
|
|
26
|
+
- When someone corrects how something looks or reads, write the reason down the same day. A correction about this project goes in `atris/taste/TASTE.md`. A correction about the person's own taste goes in `~/.atris/taste/TASTE.md`.
|
|
27
|
+
- Never write a correction into this skill folder. Updates replace it and the correction would be lost.
|
|
28
|
+
- A single verdict can also go in with `atris taste keep|kill "<thing>" --why "<reason>"`. Matching verdicts then flow into agent work automatically.
|
|
29
|
+
|
|
30
|
+
Open [notes.md](notes.md) when you write a taste file, add a line or start a new note.
|
|
31
|
+
|
|
32
|
+
## Go deeper
|
|
33
|
+
|
|
34
|
+
- [principles.md](principles.md): general rules that hold for most readers, for when no taste file exists.
|
|
35
|
+
- [notes.md](notes.md): the shape of a taste list, a taste note and a recorded correction.
|
|
36
|
+
- [../design/SKILL.md](../design/SKILL.md): the full visual rules. Taste says what people like; design says how to build it.
|
|
37
|
+
- [../../policies/ANTISLOP.md](../../policies/ANTISLOP.md): the tells that make work read as generated.
|
|
38
|
+
|
|
39
|
+
Keep this page to one screen. Detail goes in the notes.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# How taste notes work
|
|
2
|
+
|
|
3
|
+
The shape every taste file and note follows. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## The list
|
|
6
|
+
|
|
7
|
+
`TASTE.md` is one screen. Each line is the rule itself in plain words. A link to the note that backs it follows.
|
|
8
|
+
|
|
9
|
+
- Good: "Buttons say what happens in the reader's words. [buttons](buttons.md)"
|
|
10
|
+
- Bad: "[buttons](buttons.md)". A bare name makes the reader open the note just to see if it matters.
|
|
11
|
+
|
|
12
|
+
## A note
|
|
13
|
+
|
|
14
|
+
- One topic per note, such as copy, buttons or layout, under about 40 lines.
|
|
15
|
+
- First line under the title links back to `TASTE.md`.
|
|
16
|
+
- Rules first. Then the real picks that prove them: what won, what lost and the person's own words when they gave them.
|
|
17
|
+
- Say when and where a pick came from, such as a review on a date.
|
|
18
|
+
|
|
19
|
+
## A correction
|
|
20
|
+
|
|
21
|
+
1. Find the note the correction belongs to. Make a new note only for a new topic.
|
|
22
|
+
2. Write the rule and the reason in one or two sentences. Quote the person when you can.
|
|
23
|
+
3. If the rule is new, add one line for it to `TASTE.md`.
|
|
24
|
+
4. Put it in the right place: the project's `atris/taste/` for this project's brand and voice, the person's `~/.atris/taste/` for their own taste everywhere.
|
|
25
|
+
|
|
26
|
+
## Where the files live
|
|
27
|
+
|
|
28
|
+
- `atris/taste/TASTE.md` and its notes: this project. `atris init` and `atris update` create a starter file when none exists and never overwrite one.
|
|
29
|
+
- `~/.atris/taste/TASTE.md` and its notes: the person, across projects. No Atris command writes there except a person or agent recording taste.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# General principles
|
|
2
|
+
|
|
3
|
+
Rules that hold for most readers. Use them when no taste file exists. Any taste file overrides them. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## Words
|
|
6
|
+
|
|
7
|
+
- Tell a story in plain connected sentences. Lead with what it means for the reader.
|
|
8
|
+
- Every line must be true for every reader. A claim that fits only some readers makes the rest stop trusting the page.
|
|
9
|
+
- Make the reader feel strong, not wrong. Show what the product does well instead of what the reader lacks.
|
|
10
|
+
- Never claim something that has not been checked. If a feature is not built, say it is coming next.
|
|
11
|
+
- Do not explain the machinery. Say what the reader gets.
|
|
12
|
+
|
|
13
|
+
## Buttons
|
|
14
|
+
|
|
15
|
+
- The label says what happens, in the reader's words.
|
|
16
|
+
- One main action per screen. Every other action is quieter.
|
|
17
|
+
|
|
18
|
+
## Look
|
|
19
|
+
|
|
20
|
+
- One idea per screen with one thing clearly in charge.
|
|
21
|
+
- Art made from the product itself beats stock pictures and decoration.
|
|
22
|
+
- Take the idea from a reference and make it your own. Never copy its lines or its look.
|
|
23
|
+
- Avoid the tells that read as generated. The list is in [../../policies/ANTISLOP.md](../../policies/ANTISLOP.md).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wiki
|
|
3
|
-
description: "Local-first project
|
|
4
|
-
version: 1.
|
|
3
|
+
description: "Local-first project memory. Ingest sources into atris/wiki, answer questions from it and keep it as small linked notes an agent can find fast. Triggers on: wiki this, ingest this, query the wiki, lint the wiki, reorganize memory, notes are too big."
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
tags:
|
|
6
6
|
- wiki
|
|
7
7
|
- memory
|
|
@@ -13,6 +13,16 @@ tags:
|
|
|
13
13
|
|
|
14
14
|
Use this when the user wants to turn source material into durable project memory.
|
|
15
15
|
|
|
16
|
+
Project memory is small linked notes. An index fits on one screen and each line says when to open the note behind it. Agents read the index and open only the notes their work touches.
|
|
17
|
+
|
|
18
|
+
## The list
|
|
19
|
+
|
|
20
|
+
- An index line gives the rule itself and says when to open more. A bare topic name makes the reader open the file just to see if it matters. Open [index-lines.md](index-lines.md) when you write or review an index.
|
|
21
|
+
- One idea per note, under about 80 lines, with real examples right under the rule they prove. Open [note-shape.md](note-shape.md) when you create a note or one has grown.
|
|
22
|
+
- Two layers at most from boot. The boot files point to an area index and the index points to notes. Open [index-lines.md](index-lines.md) before adding a third layer.
|
|
23
|
+
- Merge duplicates, move text instead of rewriting it and prune only what you can prove is stale. Open [upkeep.md](upkeep.md) when you consolidate, split or delete.
|
|
24
|
+
- Measure recall with questions the improver never saw. Open [measure.md](measure.md) before you claim memory got better.
|
|
25
|
+
|
|
16
26
|
## Canonical path
|
|
17
27
|
|
|
18
28
|
The wiki lives in `atris/wiki/`.
|
|
@@ -49,6 +59,7 @@ When asked a wiki question:
|
|
|
49
59
|
|
|
50
60
|
When asked to lint:
|
|
51
61
|
1. Check broken references, orphans, contradictions, and obvious gaps.
|
|
62
|
+
Also flag index lines that are bare topic names and pages over about 80 lines.
|
|
52
63
|
2. Rewrite `STATUS.md` for a non-technical reader.
|
|
53
64
|
3. Append a LINT entry to `log.md`.
|
|
54
65
|
4. Suggest the next concrete ingest sources.
|
|
@@ -56,6 +67,7 @@ When asked to lint:
|
|
|
56
67
|
## Rules
|
|
57
68
|
|
|
58
69
|
- Keep the wiki useful, not bloated.
|
|
70
|
+
- Keep this page to one screen. Detail goes in the notes.
|
|
59
71
|
- Say what is uncertain.
|
|
60
72
|
- Prefer direct language over soft summaries.
|
|
61
73
|
- `atris/wiki/` is the source of truth for local memory.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Index lines
|
|
2
|
+
|
|
3
|
+
How to write the line that points at a note. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
- Lead with the rule or the answer in plain words. Many readers stop at the line and never open the note.
|
|
8
|
+
- Then say when to open the note, in the words a person uses mid-task: "Open this when you publish a release."
|
|
9
|
+
- Never use a bare topic name as the whole line. "loops: the loop system" tells the reader nothing about whether to open it.
|
|
10
|
+
- Keep an index to one screen, about 40 lines. When it grows past that, group lines under short headings or split an area index off.
|
|
11
|
+
- Two layers at most from boot. Boot files link to an area index and the area index links to notes. A note may link to a sibling note but should not be the only way to reach one.
|
|
12
|
+
- Do not stuff extra keywords into a line to win a search. Write what a person would actually look for.
|
|
13
|
+
|
|
14
|
+
## Examples
|
|
15
|
+
|
|
16
|
+
Before:
|
|
17
|
+
|
|
18
|
+
- `[[atris/wiki/systems/loops.md]]: the loop system`
|
|
19
|
+
|
|
20
|
+
After:
|
|
21
|
+
|
|
22
|
+
- Each loop owns one thing a user feels and names the receipt that proves it ran. Open [loops](systems/loops.md) when you add, pause or debug a loop.
|
|
23
|
+
|
|
24
|
+
Before:
|
|
25
|
+
|
|
26
|
+
- `[layout](layout.md)`
|
|
27
|
+
|
|
28
|
+
After (from the taste skill):
|
|
29
|
+
|
|
30
|
+
- One idea per screen, with one thing clearly in charge. [layout](layout.md)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Measure recall
|
|
2
|
+
|
|
3
|
+
How to prove a memory change helped. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
- Write questions as real tasks in your own words, never copied from index lines. A test that reuses the index wording scores well and proves nothing.
|
|
8
|
+
- Give each question a needle: an exact phrase from the note that answers it. The needle still matches after the note moves.
|
|
9
|
+
- Keep a held-out set outside the repo that the improver never reads. Score it with `--summary` so the questions are never printed.
|
|
10
|
+
- Record the baseline before you change anything. Rerun the held-out set after.
|
|
11
|
+
- Report three numbers: answers found, files opened and tokens read. Do not fold them into one score.
|
|
12
|
+
- A small exam is noisy. With 25 questions one answer is four points. Call a change real only when it beats that noise.
|
|
13
|
+
|
|
14
|
+
## Commands
|
|
15
|
+
|
|
16
|
+
`atris doc-health --recall questions.jsonl` follows links from the boot files and prints each question with what it opened.
|
|
17
|
+
|
|
18
|
+
`atris doc-health --recall ~/.atris/recall-holdout/<repo>.jsonl --summary` prints totals only.
|
|
19
|
+
|
|
20
|
+
Each line of the file is `{"id":"r01","q":"I am about to publish, what has to happen first?","needle":"push a v* tag from master"}`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Note shape
|
|
2
|
+
|
|
3
|
+
How one note should look. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
- One idea per note. If you need two headings that could each stand alone, it is two notes.
|
|
8
|
+
- Under about 80 lines. Long logs, transcripts and code go one hop deeper in `atris/context/` or a linked file.
|
|
9
|
+
- First line under the title says what the note covers and links back to its index.
|
|
10
|
+
- Rules come first and the real examples that prove them follow. Put each example right under the rule it backs, never in a separate examples file.
|
|
11
|
+
- Say where the knowledge came from: a source path, a date or the person who decided it.
|
|
12
|
+
- Name code by path and the function name beside it. That way a moved line can be found again.
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
Taste files are the model. `atris/taste/TASTE.md` is one screen of rules. Each line links to a note like `copy.md` that holds the reason and the real picks that won or lost. `atris/skills/taste/notes.md` spells out the shape.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Upkeep
|
|
2
|
+
|
|
3
|
+
How memory stays small as it grows. Back to [SKILL.md](SKILL.md).
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
- Move text, do not rewrite it. A moved sentence keeps its meaning and anything that quoted it still matches.
|
|
8
|
+
- Merge a duplicate into the note that owns the idea. Leave a one-line pointer where the old copy was if other files link to it.
|
|
9
|
+
- Delete only a true duplicate or a note you can prove is stale, such as one that names a file or command that no longer exists. List every deletion in `log.md` with the reason.
|
|
10
|
+
- When a rule can be checked by code, move the check into a test or a lint rule and shrink the note to one line that names the check.
|
|
11
|
+
- Split a note when it passes about 80 lines or starts to hold two ideas. Update the index line in the same change.
|
|
12
|
+
- Run `atris doc-health` after a reorganization. It reports boot size and checks the line refs in the map.
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
The design skill lessons table once had three rows numbered D15 and two numbered D16. One D15 row sat below the table where no reader would find it. The fix kept every lesson and gave the repeats the free numbers D33, D35 and D36. Nothing was lost and each number points at one lesson.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Team
|
|
2
|
+
|
|
3
|
+
Who does what. Each line says what a member owns and when to open its file. Each member keeps its rules in `MEMBER.md` and may add `MISSION.md`, `SOUL.md`, `START_HERE.md` and a `skills/` folder beside it.
|
|
4
|
+
|
|
5
|
+
## Plan, build and review
|
|
6
|
+
|
|
7
|
+
- Turns messy intent into a precise plan with no loopholes. Open [navigator](navigator/MEMBER.md) when you need a plan before building.
|
|
8
|
+
- Builds from a spec one step at a time. Open [executor](executor/MEMBER.md) when you are the one writing the change.
|
|
9
|
+
- Checks the work, runs the tests and approves or bounces it. Open [validator](validator/MEMBER.md) when you review a change before it ships.
|
|
10
|
+
- The fresh-eyes skeptic consulted before a big commitment, never after. Open [architect](architect/MEMBER.md) before a migration, an API design or a refactor across many files.
|
|
11
|
+
- Turns project knowledge into one useful next task. Open [task-planner](task-planner/MEMBER.md) when the queue is empty.
|
|
12
|
+
- Turns broad intent into one bounded task and refuses to call it done without proof. Open [mission-lead](mission-lead/MEMBER.md) when you start or run a mission.
|
|
13
|
+
- The last check and the only voice that briefs the owner. Open [orb](orb/MEMBER.md) before anything reaches the owner's desk.
|
|
14
|
+
|
|
15
|
+
## Language, launch and customers
|
|
16
|
+
|
|
17
|
+
- Owns every sentence a person reads from the system. Open [linguist](linguist/MEMBER.md) when a status, card or message has to make sense to the owner.
|
|
18
|
+
- Takes validated work to docs, learnings and a published release. Open [launcher](launcher/MEMBER.md) after work passes review.
|
|
19
|
+
- Shapes raw ideas through visual and logical conversation. Open [brainstormer](brainstormer/MEMBER.md) when an idea is still fuzzy.
|
|
20
|
+
- Starts from what the customer is trying to achieve and keeps commitments. Open [customer-lead](customer-lead/MEMBER.md) when you handle a customer thread or promise.
|
|
21
|
+
|
|
22
|
+
## Research, security and engines
|
|
23
|
+
|
|
24
|
+
- Finds primary sources and says so when a claim cannot be verified. Open [researcher](researcher/MEMBER.md) when a question needs real evidence.
|
|
25
|
+
- Finds holes someone with less trust could use and proves each with a ledger. Open [sentinel](sentinel/MEMBER.md) when you run or judge a security audit.
|
|
26
|
+
- Keeps the engine roster true and every engine either working or marked down. Open [engine-manager](engine-manager/MEMBER.md) when an engine fails or a new one should join.
|
|
27
|
+
- Owns how videos become knowledge. Open [youtube-lead](youtube-lead/MEMBER.md) when you work on the video notes process.
|
|
28
|
+
- Brings in at least one outside lesson a week from tool releases, new models and papers. Open [scout](scout/MEMBER.md) when you look for outside ideas.
|
|
29
|
+
|
|
30
|
+
## Improving the system
|
|
31
|
+
|
|
32
|
+
- Ships one small verified improvement each tick with a receipt. Open [auto-improver](auto-improver/MEMBER.md) when you run the improvement loop.
|
|
33
|
+
- Suggests better member behavior without applying risky changes. Open [improver](improver/MEMBER.md) when a member keeps making the same mistake.
|
|
34
|
+
- Finds new features by combining proven ones and sends true gaps to the owner. Open [alpha-judge](alpha-judge/MEMBER.md) when you look for the next feature.
|
|
35
|
+
- Ships one durable overnight artifact per tick under a hard cost lock. It is experimental. Open [opus-overnight](opus-overnight/MEMBER.md) for overnight runs.
|
|
36
|
+
- A blank builder role. Open [builder](builder/MEMBER.md) only to fill it in.
|
|
37
|
+
|
|
38
|
+
New members start from [_template](_template/MEMBER.md).
|
package/atris.md
CHANGED
|
@@ -87,10 +87,24 @@ If you cannot honor these rules, stop, write why in the journal, and ask the hum
|
|
|
87
87
|
|
|
88
88
|
Labels: `guarded` (checked by code or hook; bypassing is a bug) and `expected` (convention; honor it or stop).
|
|
89
89
|
|
|
90
|
+
## memory
|
|
91
|
+
|
|
92
|
+
Knowledge lives in small linked notes. Each area has a one-screen index whose lines say when to open the note behind them. Read the index for your area and open only what your work touches (`expected`). Skip any file this project does not have.
|
|
93
|
+
|
|
94
|
+
- Rules for reviewing work and for anything sent outside: `atris/policies/README.md`. Open it before you review, email or publish.
|
|
95
|
+
- How to do a recurring job: `atris/skills/README.md`. Open it when a task sounds like a skill or you need a process.
|
|
96
|
+
- Who owns what and how each member works: `atris/team/README.md`. Open it before you hand off or act as a member.
|
|
97
|
+
- Feature plans, specs and proofs: `atris/features/README.md`. Open it before you build a planned feature.
|
|
98
|
+
- Mistakes already made and the rule each one left: `atris/lessons.md`. Search it for your task words before risky or repeated work.
|
|
99
|
+
- Project facts and decisions: `atris/wiki/index.md`. Open it when the question is about the project, not the code.
|
|
100
|
+
- How to write or reorganize these notes: `atris/skills/wiki/SKILL.md`. Open it before you add a note or an index line.
|
|
101
|
+
|
|
90
102
|
## taste
|
|
91
103
|
|
|
92
104
|
What you ship should not read as generated. If someone would believe an AI made it at a glance, that is the bug.
|
|
93
105
|
|
|
106
|
+
- **Read the taste first.** Before making anything a person will see, read `atris/taste/TASTE.md` in this project and `~/.atris/taste/TASTE.md` in the person's home folder, whichever exist, project first. Each is a one-screen list whose lines link to short notes you open only when your work touches them. `atris/skills/taste/SKILL.md` says how to read and keep them; write corrections into those taste files, never into the skill (`expected`).
|
|
107
|
+
|
|
94
108
|
- **Gate it.** `atris slop detect <path>` is deterministic: exit 1 on a tell (file:line + rule), built for CI and review (`guarded`).
|
|
95
109
|
- **Name the move.** Direct with craft words: vertical rhythm, negative space, hierarchy, contrast, restraint.
|
|
96
110
|
- **Refuse the wells:** purple/indigo gradients, gradient-filled text, glassmorphism, Inter/Roboto defaults, claude-beige, neon-on-dark, hero-metric rows, identical card grids, eyebrow/tracked-caps labels, pulsing live-dots, em dashes.
|
package/bin/atris.js
CHANGED
|
@@ -2993,7 +2993,7 @@ if (command === 'guide') {
|
|
|
2993
2993
|
}
|
|
2994
2994
|
const dryRun = process.argv.includes('--dry-run');
|
|
2995
2995
|
require('../commands/release').releaseAtris({ dryRun })
|
|
2996
|
-
.then(() => exitAfterStdoutDrain(0))
|
|
2996
|
+
.then((code) => exitAfterStdoutDrain(typeof code === 'number' ? code : 0))
|
|
2997
2997
|
.catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
|
|
2998
2998
|
} else if (command === 'search') {
|
|
2999
2999
|
const code = require('../commands/search').searchCommand(process.argv.slice(3));
|
package/commands/activate.js
CHANGED
|
@@ -210,7 +210,7 @@ function activateAtris() {
|
|
|
210
210
|
for (const logPath of allLogs) {
|
|
211
211
|
if (recentCompletions.length >= 3) break;
|
|
212
212
|
const content = fs.readFileSync(logPath, 'utf8');
|
|
213
|
-
const completedSection = content.match(/## Completed
|
|
213
|
+
const completedSection = content.match(/## Completed(?: ✅)?[^\S\n]*\n([\s\S]*?)(?=\n## |$)/);
|
|
214
214
|
if (completedSection) {
|
|
215
215
|
// Match `- **C#: Title**` (title between the bold markers). If extra
|
|
216
216
|
// prose follows after `**`, ignore it. the activation view shows
|