@arjunkhera/atlas 0.3.32 → 0.3.34
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/.claude-plugin/plugin.json +1 -1
- package/door/kit-releases.json +4 -0
- package/package.json +1 -1
- package/skills/feedback/SKILL.md +22 -12
- package/tests/model.mjs +3 -0
package/door/kit-releases.json
CHANGED
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
{
|
|
29
29
|
"kit_sha256": "08c868aa39e6c9f471da2571e9a1d5939932a59856cea9c4176e3173f93454db",
|
|
30
30
|
"first_package": "0.3.30"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"kit_sha256": "c4a506ec261d2d2fd7884943c9d317fb7b522704f4f63669b5bd37d32326bde5",
|
|
34
|
+
"first_package": "0.3.32"
|
|
31
35
|
}
|
|
32
36
|
]
|
|
33
37
|
}
|
package/package.json
CHANGED
package/skills/feedback/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: feedback
|
|
|
3
3
|
description: >
|
|
4
4
|
File a report about Atlas, or about a product, as an issue in the right public repo.
|
|
5
5
|
Trigger when someone says "Atlas should …", "report this", "file an issue", or asks for a
|
|
6
|
-
feature or a fix that is not a correction of the work in this session. It searches
|
|
6
|
+
feature or a fix that is not a correction of the work in this session. It searches the
|
|
7
7
|
issues first and files nothing until the person says "file it".
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -18,10 +18,14 @@ goes to the `atlas:learnings` skill instead.
|
|
|
18
18
|
1. **Find the issue repo.** Read it from the product record: the Atlas
|
|
19
19
|
tools return it with the product. For a report about Atlas itself, the
|
|
20
20
|
issue repo is the Atlas repo. If no issue repo is known, ask for it.
|
|
21
|
-
2. **Search
|
|
22
|
-
--state
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
2. **Search the issues first.** Use `gh issue list --repo <repo>
|
|
22
|
+
--state all --search "<key words>"`. Try two or three short searches.
|
|
23
|
+
Search closed issues too: an issue closes when its tracker item
|
|
24
|
+
exists, and its closing note names the item.
|
|
25
|
+
3. **Show what you found.** If an issue matches, show its title and
|
|
26
|
+
link. A closing note can name an item. Then the work lives in that
|
|
27
|
+
item, so offer to add the new detail with `item_comment`. Otherwise
|
|
28
|
+
offer to add it to the issue as a comment.
|
|
25
29
|
4. **Draft the issue.** Write a title and a short body: what happens, what
|
|
26
30
|
should happen, and the steps to see it. Write in plain words.
|
|
27
31
|
5. **Run the privacy filter.** Write the draft to a scratch file, and run
|
|
@@ -30,24 +34,28 @@ goes to the `atlas:learnings` skill instead.
|
|
|
30
34
|
"file it", or the same in their own words.
|
|
31
35
|
7. **File it once.** Use `gh issue create --repo <repo> --title <title>
|
|
32
36
|
--body-file <file>`.
|
|
33
|
-
8. **
|
|
37
|
+
8. **Move the issue into the tracker.** The tracker item is the one home
|
|
38
|
+
for the work. The issue stays as the record of the report, closed.
|
|
34
39
|
The lead does this step, because only the lead writes to the tracker.
|
|
35
40
|
1. Call `item_propose` with the product and the repo of the issue.
|
|
36
41
|
Use the issue title as the title. Use the person's own words as
|
|
37
42
|
the origin, with the issue link as its source.
|
|
38
43
|
2. Call `item_link` on the new item with kind `issue`, the issue URL
|
|
39
44
|
and role `report`.
|
|
40
|
-
3.
|
|
45
|
+
3. Close the issue with a comment that names the item id. Say that
|
|
46
|
+
the item now holds the work. Use `gh issue close <number> --repo
|
|
47
|
+
<repo> --comment "<note>"`.
|
|
41
48
|
4. Give the person the issue link and the item id.
|
|
42
49
|
|
|
43
|
-
|
|
44
|
-
item
|
|
45
|
-
the owner is not present
|
|
46
|
-
the owner must add
|
|
50
|
+
The issue can add to an issue that has an item. Then link it to that
|
|
51
|
+
item, make no new item, and close it the same way. `item_propose` can
|
|
52
|
+
refuse because the owner is not present. Then keep the issue open,
|
|
53
|
+
give the person the issue link, and say that the owner must add it.
|
|
47
54
|
|
|
48
55
|
Example: the person says "Atlas should show which copy runs", then
|
|
49
56
|
"file it". The lead files issue #150, proposes the item "Show which copy
|
|
50
|
-
of Atlas runs", links #150 to it
|
|
57
|
+
of Atlas runs", and links #150 to it. Then the lead closes #150 with the
|
|
58
|
+
note "Tracked as item 1a2b3c4d. The item holds the work now."
|
|
51
59
|
|
|
52
60
|
When `gh` fails or is not there, use the session's GitHub tools for the
|
|
53
61
|
same search and the same issue.
|
|
@@ -60,3 +68,5 @@ same search and the same issue.
|
|
|
60
68
|
3. One report is one issue. Split a report that holds two asks.
|
|
61
69
|
4. Never leave a filed issue with no tracker item, except when the owner
|
|
62
70
|
is not present. Then say so.
|
|
71
|
+
5. Never keep an issue open after its item exists. The owner's rule of
|
|
72
|
+
21 October 2026: the work moves to the item.
|
package/tests/model.mjs
CHANGED
|
@@ -291,6 +291,9 @@ export async function runClaude({ prompt, args = [], key, cwd, meter, what, reda
|
|
|
291
291
|
meter.add(Number.isFinite(cost) ? cost : left, what, id);
|
|
292
292
|
if (!envelope) throw new Error(`${what}: the model command gave no answer (exit ${out.exit}): ${(redactor ? redactor.text(out.stderr || out.stdout) : out.stderr || out.stdout).slice(0, 400)}`);
|
|
293
293
|
const clean = (t) => (redactor ? redactor.text(t) : t);
|
|
294
|
+
// An error answer with no cost never reached the model: a refused sign-in, no credit, a bad model
|
|
295
|
+
// name. The scenario cannot pass or fail on it, so it reads blocked, with the reason.
|
|
296
|
+
if (envelope.is_error && !Number.isFinite(cost)) throw new Blocked(`${what}: the model call failed before the model answered: ${clean(String(envelope.result ?? envelope.error ?? (out.stderr || out.stdout))).slice(0, 400)}`);
|
|
294
297
|
if (out.signal === 'SIGKILL') throw new Error(`${what}: the model call ran past ${Math.round(timeoutMs / 1000)} seconds and was stopped`);
|
|
295
298
|
return { exit: out.exit, stdout: clean(out.stdout), stderr: clean(out.stderr), envelope, events, cost: Number.isFinite(cost) ? cost : null };
|
|
296
299
|
} finally {
|