@mestreyoda/fabrica 0.2.12 → 0.2.14
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/CHANGELOG.md +13 -0
- package/defaults/fabrica/prompts/architect.md +12 -16
- package/defaults/fabrica/prompts/developer.md +10 -13
- package/defaults/fabrica/prompts/tester.md +15 -9
- package/dist/index.js +10329 -9434
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.14 - 2026-04-01
|
|
4
|
+
|
|
5
|
+
- Made `agent_end` authoritative for reviewer completion as well, so reviewer sessions no longer depend on delayed `subagent_ended` or reviewer polling to advance the FSM.
|
|
6
|
+
- Added session-history fallback for developer/tester/architect lifecycle completion when `agent_end` arrives without the final assistant result line.
|
|
7
|
+
- Hardened Telegram bootstrap ownership so stale attempts stop before stamping `project_registered` data or replaying kickoff, `projectTick`, or completion DM side effects onto a newer attempt.
|
|
8
|
+
- Added regression coverage for reviewer `agent_end` routing, worker lifecycle session-history fallback, and successful bootstrap owner-loss races.
|
|
9
|
+
|
|
10
|
+
## 0.2.13 - 2026-03-31
|
|
11
|
+
|
|
12
|
+
- Disabled automatic pretty logging on TTY so the plugin no longer depends on `pino-pretty` during load.
|
|
13
|
+
- Added a safe one-shot fallback to structured logs when pretty transport resolution or initialization fails.
|
|
14
|
+
- Added logger transport regression coverage and promoted it into the hot-path test lane.
|
|
15
|
+
|
|
3
16
|
## 0.2.12 - 2026-03-31
|
|
4
17
|
|
|
5
18
|
- Made the published plugin self-contained by replacing remaining runtime helper imports from `openclaw/plugin-sdk`.
|
|
@@ -48,7 +48,7 @@ What exists today? Current limitations? Relevant code paths.
|
|
|
48
48
|
|
|
49
49
|
## MANDATORY: Create ONE Implementation Task
|
|
50
50
|
|
|
51
|
-
After posting your findings, you MUST create **exactly one comprehensive implementation task** for the recommended approach before
|
|
51
|
+
After posting your findings, you MUST create **exactly one comprehensive implementation task** for the recommended approach before ending with your final architecture result line.
|
|
52
52
|
|
|
53
53
|
**⚠️ CRITICAL: Always create ONE task, never multiple.** Do not split work into separate issues. A single developer will pick up the task and work through the checklist. This keeps scope clear, reduces issue noise, and makes tracking easy.
|
|
54
54
|
|
|
@@ -101,22 +101,16 @@ Brief summary of what needs to be implemented and why.
|
|
|
101
101
|
- `description`: use the format above — detailed enough for a developer to start immediately
|
|
102
102
|
|
|
103
103
|
2. Collect the returned issue `id`, `title`, and `url` from the `task_create` response
|
|
104
|
-
3.
|
|
104
|
+
3. Mention the created task number and URL in your final prose before the result line so the operator can see what was created
|
|
105
105
|
|
|
106
106
|
**Example:**
|
|
107
107
|
```
|
|
108
108
|
task_create({ projectSlug: "<project slug from the 'Channel:' line in the task message>", title: "Implement SQLite session persistence", description: "From research #42\n\n## Overview\nReplace in-memory Map with SQLite...\n\n## Implementation Checklist\n\n### Phase 1: Schema & Migration (~1 day)\n- [ ] Create sessions table schema in db/schema.sql\n- [ ] Add migration logic in db/migrate.ts\n..." })
|
|
109
109
|
// → returns issue id: 43, url: "https://github.com/.../43"
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
channelId: "my-app",
|
|
115
|
-
summary: "Recommended SQLite approach. Created task #43.",
|
|
116
|
-
createdTasks: [
|
|
117
|
-
{ id: 43, title: "Implement SQLite session persistence", url: "https://github.com/.../43" }
|
|
118
|
-
]
|
|
119
|
-
})
|
|
111
|
+
Recommended SQLite approach. Created implementation task #43:
|
|
112
|
+
https://github.com/.../43
|
|
113
|
+
Architecture result: DONE
|
|
120
114
|
```
|
|
121
115
|
|
|
122
116
|
The task is created in Planning state — the operator reviews and moves it to the queue when ready.
|
|
@@ -128,16 +122,18 @@ The task is created in Planning state — the operator reviews and moves it to t
|
|
|
128
122
|
## Important
|
|
129
123
|
|
|
130
124
|
- **Be thorough** — Your output becomes the spec for development. Missing detail = blocked developer.
|
|
131
|
-
- **If you need user input** —
|
|
125
|
+
- **If you need user input** — End with `Architecture result: BLOCKED` and explain what you need. Do NOT guess on ambiguous requirements.
|
|
132
126
|
- **Post findings as issue comments** — Use task_comment to write your analysis on the issue.
|
|
133
|
-
- **Always create a task** — Do not
|
|
127
|
+
- **Always create a task** — Do not end with `Architecture result: DONE` without first creating an implementation task via task_create.
|
|
134
128
|
|
|
135
129
|
## Completing Your Task
|
|
136
130
|
|
|
137
|
-
When you are done,
|
|
131
|
+
When you are done, end your response with exactly one final result line in plain text:
|
|
138
132
|
|
|
139
|
-
-
|
|
140
|
-
-
|
|
133
|
+
- `Architecture result: DONE`
|
|
134
|
+
- `Architecture result: BLOCKED`
|
|
135
|
+
|
|
136
|
+
Write any recommendation summary and created task references before that final line.
|
|
141
137
|
|
|
142
138
|
The project slug is included on the `Channel:` line in your task message. Your session is persistent — you may be called back for refinements.
|
|
143
139
|
|
|
@@ -110,7 +110,7 @@ When your task message includes a **PR Feedback** section, it means a reviewer r
|
|
|
110
110
|
```
|
|
111
111
|
4. Address **only** the reviewer's comments — do not re-implement the original issue from scratch
|
|
112
112
|
5. Commit and push to the **same branch** — the existing PR updates automatically
|
|
113
|
-
6.
|
|
113
|
+
6. End your response with the canonical developer result line described below
|
|
114
114
|
|
|
115
115
|
### QA Evidence (MANDATORY)
|
|
116
116
|
|
|
@@ -132,19 +132,16 @@ gh pr edit "$PR_NUM" --body "$(printf '%s\n\n## QA Evidence\n\n```\n%s\n```\n\nE
|
|
|
132
132
|
|
|
133
133
|
**Do NOT post QA evidence only as a comment.** PR comments are not canonical QA evidence; the reviewer and the workflow both validate the PR description body.
|
|
134
134
|
|
|
135
|
-
### 5.
|
|
135
|
+
### 5. End with the canonical result line
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
After you finish the implementation work, end your response with exactly one final result line in plain text:
|
|
138
138
|
|
|
139
|
-
|
|
140
|
-
- `
|
|
141
|
-
- `result`: `"done"` (or `"blocked"` if stuck)
|
|
142
|
-
- `channelId`: the project slug from the `"Project: <name>"` line in your task message (e.g., `"gestao-notas"`)
|
|
143
|
-
- `summary`: brief description of what you did
|
|
139
|
+
- `Work result: DONE`
|
|
140
|
+
- `Work result: BLOCKED`
|
|
144
141
|
|
|
145
|
-
|
|
142
|
+
Use `Work result: BLOCKED` if you hit an external blocker, ambiguity, or missing dependency that prevents completion.
|
|
146
143
|
|
|
147
|
-
**
|
|
144
|
+
Do **not** rely on tool availability to conclude the task. Fabrica reads the final result line directly from your response and advances the pipeline from it.
|
|
148
145
|
|
|
149
146
|
## Security Checklist (MANDATORY before commit)
|
|
150
147
|
|
|
@@ -182,9 +179,9 @@ Choose the pattern appropriate to your stack:
|
|
|
182
179
|
These are orchestrator-only tools. Do not call them:
|
|
183
180
|
- `task_start`, `tasks_status`, `health`, `project_register`
|
|
184
181
|
|
|
185
|
-
## Anti-Pattern Checklist (MANDATORY before
|
|
182
|
+
## Anti-Pattern Checklist (MANDATORY before declaring done)
|
|
186
183
|
|
|
187
|
-
Before
|
|
184
|
+
Before ending with `Work result: DONE`, verify ALL of these:
|
|
188
185
|
|
|
189
186
|
### Code Quality
|
|
190
187
|
- [ ] Every function has a descriptive name (no `data`, `temp`, `result`, `handle`)
|
|
@@ -196,7 +193,7 @@ Before calling `work_finish(done)`, verify ALL of these:
|
|
|
196
193
|
|
|
197
194
|
### QA Contract
|
|
198
195
|
- [ ] Run `scripts/qa.sh` and verify ALL 5 gates pass (lint, types, security, tests, coverage)
|
|
199
|
-
- [ ] If qa.sh fails, FIX the issue — do NOT
|
|
196
|
+
- [ ] If qa.sh fails, FIX the issue — do NOT declare done with failing gates
|
|
200
197
|
- [ ] Coverage meets or exceeds the threshold in qa.sh (default: 80%)
|
|
201
198
|
|
|
202
199
|
### Git Hygiene
|
|
@@ -122,17 +122,23 @@ Use `task_comment` to post your findings in this format:
|
|
|
122
122
|
<brief summary>
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
### 6.
|
|
125
|
+
### 6. End with the canonical result line
|
|
126
126
|
|
|
127
|
-
|
|
128
|
-
- **Fail:** `work_finish({ role: "tester", result: "fail", channelId: "<project slug from the 'Channel:' line in the task message>", summary: "<specific failures>" })`
|
|
129
|
-
- **Fail Infra:** `work_finish({ role: "tester", result: "fail_infra", channelId: "<project slug from the 'Channel:' line in the task message>", summary: "<toolchain or environment failure that prevented QA>" })`
|
|
130
|
-
- **Refine:** `work_finish({ role: "tester", result: "refine", channelId: "<project slug from the 'Channel:' line in the task message>", summary: "<what needs human input>" })`
|
|
131
|
-
- **Blocked:** `work_finish({ role: "tester", result: "blocked", channelId: "<project slug from the 'Channel:' line in the task message>", summary: "<what you need>" })`
|
|
127
|
+
After posting the QA report, end your response with exactly one final result line in plain text:
|
|
132
128
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
129
|
+
- `Test result: PASS`
|
|
130
|
+
- `Test result: FAIL`
|
|
131
|
+
- `Test result: FAIL_INFRA`
|
|
132
|
+
- `Test result: REFINE`
|
|
133
|
+
- `Test result: BLOCKED`
|
|
134
|
+
|
|
135
|
+
Use:
|
|
136
|
+
- `FAIL` when the implementation is wrong or acceptance criteria fail.
|
|
137
|
+
- `FAIL_INFRA` when the toolchain or environment prevented valid QA execution.
|
|
138
|
+
- `REFINE` when human clarification or non-code product refinement is required before testing can conclude.
|
|
139
|
+
- `BLOCKED` when you cannot proceed for another reason.
|
|
140
|
+
|
|
141
|
+
Do **not** rely on tool availability to conclude the task. Fabrica reads the final result line directly from your response and advances the pipeline from it.
|
|
136
142
|
|
|
137
143
|
## Conventions
|
|
138
144
|
|