ghostrail 0.7.3 → 0.8.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 (74) hide show
  1. package/dist/agent/claude-code.d.ts.map +1 -1
  2. package/dist/agent/claude-code.js +18 -3
  3. package/dist/agent/claude-code.js.map +1 -1
  4. package/dist/agent/failure.d.ts +26 -0
  5. package/dist/agent/failure.d.ts.map +1 -1
  6. package/dist/agent/failure.js +26 -1
  7. package/dist/agent/failure.js.map +1 -1
  8. package/dist/agent/index.d.ts +1 -1
  9. package/dist/agent/index.d.ts.map +1 -1
  10. package/dist/agent/index.js +1 -1
  11. package/dist/agent/index.js.map +1 -1
  12. package/dist/agent/prompt.d.ts +10 -2
  13. package/dist/agent/prompt.d.ts.map +1 -1
  14. package/dist/agent/prompt.js +17 -3
  15. package/dist/agent/prompt.js.map +1 -1
  16. package/dist/agent/result.d.ts +3 -2
  17. package/dist/agent/result.d.ts.map +1 -1
  18. package/dist/agent/result.js +19 -4
  19. package/dist/agent/result.js.map +1 -1
  20. package/dist/backend/container.d.ts.map +1 -1
  21. package/dist/backend/container.js +46 -1
  22. package/dist/backend/container.js.map +1 -1
  23. package/dist/backend/docker.d.ts +15 -0
  24. package/dist/backend/docker.d.ts.map +1 -1
  25. package/dist/backend/docker.js +15 -0
  26. package/dist/backend/docker.js.map +1 -1
  27. package/dist/claude-profile/classify.d.ts +6 -1
  28. package/dist/claude-profile/classify.d.ts.map +1 -1
  29. package/dist/claude-profile/classify.js +95 -22
  30. package/dist/claude-profile/classify.js.map +1 -1
  31. package/dist/cli/commands.d.ts +4 -2
  32. package/dist/cli/commands.d.ts.map +1 -1
  33. package/dist/cli/commands.js +128 -4
  34. package/dist/cli/commands.js.map +1 -1
  35. package/dist/commands/help.d.ts.map +1 -1
  36. package/dist/commands/help.js +3 -1
  37. package/dist/commands/help.js.map +1 -1
  38. package/dist/init/drift.d.ts +68 -0
  39. package/dist/init/drift.d.ts.map +1 -0
  40. package/dist/init/drift.js +103 -0
  41. package/dist/init/drift.js.map +1 -0
  42. package/dist/loop/engine.d.ts +1 -1
  43. package/dist/loop/engine.d.ts.map +1 -1
  44. package/dist/loop/engine.js +40 -8
  45. package/dist/loop/engine.js.map +1 -1
  46. package/dist/loop/ports.d.ts +33 -1
  47. package/dist/loop/ports.d.ts.map +1 -1
  48. package/dist/publish/gh.d.ts +33 -0
  49. package/dist/publish/gh.d.ts.map +1 -1
  50. package/dist/publish/gh.js +61 -0
  51. package/dist/publish/gh.js.map +1 -1
  52. package/dist/publish/githost.d.ts +35 -7
  53. package/dist/publish/githost.d.ts.map +1 -1
  54. package/dist/publish/githost.js +51 -9
  55. package/dist/publish/githost.js.map +1 -1
  56. package/dist/publish/github-publisher.d.ts +25 -2
  57. package/dist/publish/github-publisher.d.ts.map +1 -1
  58. package/dist/publish/github-publisher.js +46 -6
  59. package/dist/publish/github-publisher.js.map +1 -1
  60. package/dist/respond/respond.d.ts.map +1 -1
  61. package/dist/respond/respond.js +17 -3
  62. package/dist/respond/respond.js.map +1 -1
  63. package/dist/source/linear.d.ts +6 -1
  64. package/dist/source/linear.d.ts.map +1 -1
  65. package/dist/source/linear.js +25 -6
  66. package/dist/source/linear.js.map +1 -1
  67. package/docker/factory.Dockerfile +8 -0
  68. package/package.json +1 -1
  69. package/skill/ghostrail/SKILL.md +62 -16
  70. package/templates/code-local/prompts/resolve-issue.md +20 -2
  71. package/templates/code-local/prompts/respond.md +1 -1
  72. package/templates/code-local/prompts/triage.md +4 -0
  73. package/templates/content-loop/prompts/draft.md +6 -2
  74. package/templates/content-loop/prompts/respond.md +1 -1
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: ghostrail
3
- description: Drive ghostrail (the software factory) from inside this repo. Use when the user types /ghostrail, or asks to set up, customize, check, or run a ghostrail factory — scaffolding ghostrail.toml and prompts, tailoring the scaffolded prompts and gate commands to this codebase, diagnosing a broken setup, or kicking off a run/respond/triage tick.
3
+ description: Drive ghostrail (the software factory) from inside this repo. Use when the user types /ghostrail, or asks to set up, customize, check, or run a ghostrail factory — scaffolding ghostrail.toml and prompts, tailoring the scaffolded prompts and gate commands to this codebase, carrying a later template improvement into prompts you have customized, diagnosing a broken setup, or kicking off a run/respond/triage tick.
4
4
  user-invocable: true
5
- argument-hint: "[customize | init | doctor | status | run | respond | triage]"
5
+ argument-hint: "[customize | init | update | doctor | status | run | respond | triage]"
6
6
  license: Apache-2.0
7
7
  metadata:
8
- version: 0.2.0
8
+ version: 0.3.0
9
9
  allowed-tools:
10
10
  - Read
11
11
  - Write
@@ -87,25 +87,71 @@ Scaffold the factory into this repo, then hand off to **customize**.
87
87
 
88
88
  ### Already initialized? Check for template drift
89
89
 
90
- If the repo already has `ghostrail.toml` and `prompts/`, do not re-run a bare
91
- `init` and report "0 files written" as if nothing were wrong. Run:
90
+ If the repo already has `ghostrail.toml` and prompts, do not re-run a bare
91
+ `init` and report "0 files written" as if nothing were wrong. See **update**
92
+ below.
93
+
94
+ Never suggest `--force` as the way to take a template update: it overwrites
95
+ every file, destroying the gate commands, tracker filters, and prompt edits that
96
+ **customize** wrote.
97
+
98
+ ---
99
+
100
+ ## update
101
+
102
+ Carry a template improvement into a repo that has customized its prompts. Run:
103
+
104
+ ```
105
+ <GR> init <template> --update
106
+ ```
107
+
108
+ It writes only files this repo never edited (proved by the baseline in
109
+ `ghostrail.template.json`), and it never touches a customized file. For those it
110
+ prints **signals**: what the template gained that the repo's copy lacks.
92
111
 
93
112
  ```
94
- <GR> init <template> --diff
113
+ ghostrail/prompts/resolve-issue.md
114
+ customized, and the template gained:
115
+ placeholder {{description}}
116
+ result field "testPlan"
95
117
  ```
96
118
 
97
- It is read-only. It reports each scaffolded file as up to date, locally
98
- customized, safe to take, a conflict, or missing, using the baseline recorded in
99
- `ghostrail.template.json`. Summarize the rows that are not up to date, show the
100
- `diff` command it printed, and offer to merge template changes in by hand.
119
+ Placing those is your job, and it is not a text merge. A customized prompt can
120
+ be a near-total rewrite that still needs the same one-line addition, so port the
121
+ **intent**, not the template's wording:
122
+
123
+ 1. Read the template's copy of the file to see how it uses the signal. The path
124
+ is printed by `<GR> init <template> --diff`.
125
+ 2. Read the repo's copy and find where the same idea belongs *in its structure*.
126
+ 3. Add it in the repo's own voice. A placeholder goes where that content is
127
+ wanted (`{{description}}` under the issue's ID/title/link block). A result
128
+ field goes on the matching line of the result-document list, with a
129
+ description written to match the surrounding entries.
130
+ 4. Never reformat, reorder, or "tidy" the rest of the file. The customization is
131
+ deliberate. Your diff should be as small as the signal count implies.
132
+ 5. Re-run `<GR> init <template> --update` and confirm it now reports
133
+ `customized, nothing to take`.
134
+
135
+ Verify a placeholder actually renders before anyone spends a run on it:
136
+
137
+ ```
138
+ node -e 'import("URL_TO_PROMPT_JS").then(({renderPrompt})=>{
139
+ const t=require("fs").readFileSync("PATH/TO/PROMPT.md","utf8");
140
+ const o=renderPrompt(t,{id:"TJ-1",title:"t",url:"u",description:"BODY"});
141
+ console.log(o.match(/\{\{[a-z]+\}\}/g) ?? "no unrendered placeholders");
142
+ })'
143
+ ```
101
144
 
102
- Never suggest `--force` as the way to take a template update: it overwrites every
103
- file, destroying the gate commands, tracker filters, and prompt edits that
104
- **customize** wrote. Merging by hand is the correct path.
145
+ Two things to tell the user plainly:
105
146
 
106
- If it reports no recorded baseline, the repo predates provenance. Re-running a
107
- bare `<GR> init` once adopts a baseline for every file that still matches the
108
- template exactly, which is safe and improves later diffs.
147
+ - **The installed template is the last published release.** A repo can be
148
+ current with it and still behind `main`. The `--update` header names the
149
+ version it compared against; repeat that in your summary.
150
+ - **A repo with no baseline gets signals but no writes.** Without a recorded
151
+ baseline nothing can be *shown* to be untouched, so `--update` will not
152
+ overwrite anything. Re-running a bare `<GR> init` once adopts a baseline for
153
+ every file that still matches the template exactly, which is safe and makes
154
+ later updates able to write.
109
155
 
110
156
  ---
111
157
 
@@ -13,6 +13,10 @@ Match the surrounding code: its style, patterns, and test conventions.
13
13
  - Title: {{title}}
14
14
  - Link: {{url}}
15
15
 
16
+ ### Description
17
+
18
+ {{description}}
19
+
16
20
  ## What to do
17
21
  1. Locate the relevant code and understand how it is structured.
18
22
  2. Make the smallest correct change that resolves the issue.
@@ -22,10 +26,24 @@ Match the surrounding code: its style, patterns, and test conventions.
22
26
  ## Reporting your result (required, do this last)
23
27
  Write a JSON file at `.ghostrail/result.json` with exactly one of:
24
28
 
25
- - `{"status":"done","summary":"<what you changed>","type":"<feat|fix|docs|refactor|chore|...>"}`
29
+ - `{"status":"done","summary":"<what changed and why>","testPlan":"<how to check it by hand>","type":"<feat|fix|docs|refactor|chore|...>"}`
26
30
  - `{"status":"blocked","questions":"<a real product/design decision you need>"}`
27
31
  - `{"status":"failed","error":"<why>"}`
28
- - `{"status":"noop"}`
32
+ - `{"status":"noop","reason":"<why nothing needed changing>"}`
29
33
 
30
34
  `type` is the conventional-commit type for the change; it sets the commit and PR
31
35
  title. If you omit it, the factory's configured default is used.
36
+
37
+ `summary` and `testPlan` are the pull request a human reads, so write them for
38
+ that reader rather than as a log of what you did:
39
+
40
+ - **`summary`**: one or two sentences on what changed and why, then markdown
41
+ bullets for the specifics. Do not write a single long paragraph, and do not
42
+ add headings; the factory supplies its own.
43
+ - **`testPlan`**: the steps someone runs to check this by hand. Concrete
44
+ commands, what to look at, and what they should see. The gate has already run
45
+ lint, typecheck, and the unit suite, so do not just repeat those: give the
46
+ commands that exercise what you actually changed. If the change is not
47
+ observable by hand (a refactor, a type fix), say what to run instead and what
48
+ a green result proves.
49
+
@@ -22,6 +22,6 @@ Write a JSON file at `.ghostrail/result.json` with exactly one of:
22
22
  - `{"status":"done","summary":"<what you changed in response>"}`
23
23
  - `{"status":"blocked","questions":"<what you need answered>"}`
24
24
  - `{"status":"failed","error":"<why>"}`
25
- - `{"status":"noop"}`
25
+ - `{"status":"noop","reason":"<why nothing needed changing>"}`
26
26
 
27
27
  On `done` the factory commits and pushes to the PR branch and posts a summary.
@@ -10,6 +10,10 @@ git and do not change any source files except the two output files below.
10
10
  - Title: {{title}}
11
11
  - Link: {{url}}
12
12
 
13
+ ### Description
14
+
15
+ {{description}}
16
+
13
17
  ## What to do
14
18
  1. Read the issue and enough of the codebase to judge its scope.
15
19
  2. Decide:
@@ -9,6 +9,10 @@ git: the factory owns commits, branches, and PRs.
9
9
  - Title: {{title}}
10
10
  - Link: {{url}}
11
11
 
12
+ ### Description
13
+
14
+ {{description}}
15
+
12
16
  ## Shared references
13
17
  Read any files under `.ghostrail/artifacts/` (voice and style, formats,
14
18
  strategy). Follow them closely: they define how this work should read.
@@ -21,9 +25,9 @@ strategy). Follow them closely: they define how this work should read.
21
25
  ## Reporting your result (required, do this last)
22
26
  Write `.ghostrail/result.json` with exactly one of:
23
27
 
24
- - `{"status":"done","summary":"<one-paragraph summary of the draft>"}`
28
+ - `{"status":"done","summary":"<what you drafted and why>","testPlan":"<how to review it>"}`
25
29
  - `{"status":"blocked","questions":"<what you need decided>"}`
26
30
  - `{"status":"failed","error":"<why>"}`
27
- - `{"status":"noop"}`
31
+ - `{"status":"noop","reason":"<why nothing needed changing>"}`
28
32
 
29
33
  The factory opens a draft pull request for a human to review.
@@ -22,4 +22,4 @@ Write a JSON file at `.ghostrail/result.json` with exactly one of:
22
22
  - `{"status":"done","summary":"<what you revised>"}`
23
23
  - `{"status":"blocked","questions":"<what you need answered>"}`
24
24
  - `{"status":"failed","error":"<why>"}`
25
- - `{"status":"noop"}`
25
+ - `{"status":"noop","reason":"<why nothing needed changing>"}`