pi-goal-x 0.6.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/LICENSE +21 -0
- package/README.md +307 -0
- package/docs/agent-flow-design.md +432 -0
- package/docs/agentic-runtime-prd.md +764 -0
- package/docs/architecture.md +239 -0
- package/docs/goal-ts-refactor-test-strategy.md +82 -0
- package/docs/pi-autoresearch-survey.md +45 -0
- package/extensions/goal-auditor.ts +341 -0
- package/extensions/goal-compaction.ts +124 -0
- package/extensions/goal-core.ts +77 -0
- package/extensions/goal-draft.ts +148 -0
- package/extensions/goal-ledger.ts +319 -0
- package/extensions/goal-policy.ts +152 -0
- package/extensions/goal-pool.ts +94 -0
- package/extensions/goal-questionnaire.ts +533 -0
- package/extensions/goal-record.ts +171 -0
- package/extensions/goal-tool-names.ts +69 -0
- package/extensions/goal.ts +2610 -0
- package/extensions/prompts/goal-prompts.ts +166 -0
- package/extensions/storage/goal-files.ts +267 -0
- package/extensions/widgets/goal-notifications.ts +9 -0
- package/extensions/widgets/goal-widget.ts +219 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lucas
|
|
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
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# pi-goal-x
|
|
2
|
+
|
|
3
|
+
> **Fork of [@capyup/pi-goal](https://github.com/capyup/pi-goal).** Upstream changes can be merged from the original repository.
|
|
4
|
+
|
|
5
|
+
`pi-goal-x` is a long-running goal extension for [pi](https://github.com/earendil-works/pi-coding-agent). It gives the agent a durable objective, a visible lifecycle, and schema-gated tools for drafting, executing, pausing, resuming, and completing work.
|
|
6
|
+
|
|
7
|
+
The extension is designed around one rule: **the user owns intent; the agent executes only after the goal is explicit and confirmed**.
|
|
8
|
+
|
|
9
|
+
## What it provides
|
|
10
|
+
|
|
11
|
+
- **Two goal styles**: regular goals for open-ended work, and Sisyphus goals for patient ordered execution.
|
|
12
|
+
- **Intent-before-run flow**: `/goals` and `/sisyphus` start a discussion where the agent can clarify, research, and grill before any work begins.
|
|
13
|
+
- **Direct set flow**: `/goals-set` and `/sisyphus-set` immediately create and start a goal from the supplied objective.
|
|
14
|
+
- **Confirm-before-commit for discussions**: the agent must call `propose_goal_draft`; the user confirms or keeps chatting.
|
|
15
|
+
- **Full goal visibility**: after confirmation, the final objective is printed back into the conversation in full.
|
|
16
|
+
- **Multiple open goals**: `.pi/goals/` may hold several active goal files at once; each pi session focuses exactly one goal at a time.
|
|
17
|
+
- **Session-local focus**: the focused goal id is stored as a branch-local session entry, not in goal markdown metadata.
|
|
18
|
+
- **Auto-continue loop**: confirmed goals can continue across turns until completion, pause, abort, user interruption, or the empty-turn guard.
|
|
19
|
+
- **Schema gates**: unsafe lifecycle transitions are rejected by tool validators, not just prompts.
|
|
20
|
+
- **Sisyphus as a light variant**: Sisyphus shares the normal lifecycle/tools and differs only in prompt style and completion standard.
|
|
21
|
+
- **Pause/resume/abort/clear lifecycle**: goals can be paused by the user, paused by the agent when blocked, resumed, completed from pause, aborted, or archived.
|
|
22
|
+
- **Disk-backed state**: active and archived goals are stored under `.pi/goals/`.
|
|
23
|
+
- **Lightweight built-in questionnaire tools**: `goal_question` and `goal_questionnaire` let the agent ask structured drafting questions without depending on another package.
|
|
24
|
+
- **Above-editor status widget**: pi shows the current goal, status, progress, and active file path while work is running.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
From npm:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pi install npm:pi-goal-x
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
From a local checkout:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pi install .
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Try once without installing:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pi -e .
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Quick start
|
|
47
|
+
|
|
48
|
+
### Regular goal
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
/goals add structured logging to the auth module
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Flow:
|
|
55
|
+
|
|
56
|
+
1. The agent clarifies, researches, or grills only when the goal contract needs it.
|
|
57
|
+
2. The agent calls `propose_goal_draft` with a concrete objective once the contract is clear.
|
|
58
|
+
3. pi shows a full plain-text confirmation report.
|
|
59
|
+
4. If confirmed, the full finalized goal is printed into the conversation and written to `.pi/goals/`.
|
|
60
|
+
5. The new goal becomes this session's focus. Existing open goals remain in `.pi/goals/` and can be selected later with `/goal-focus`.
|
|
61
|
+
6. The agent works only on the focused goal until it calls `update_goal(status="complete")`, pauses, aborts, produces an empty/non-progress turn, or the user interrupts.
|
|
62
|
+
|
|
63
|
+
### Sisyphus goal
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
/sisyphus Refactor the auth flow: 1) extract token validation. 2) wire it into login. 3) update tests.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Sisyphus mode is for patient ordered execution. It uses the same lifecycle and tools as a regular goal; the difference is the prompt style and completion standard: preserve the user's order, do not rush, do not invent preflight/reconnaissance steps, and stop to ask when blocked.
|
|
70
|
+
|
|
71
|
+
If the objective is already final and should start immediately, use:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
/goals-set add structured logging to the auth module
|
|
75
|
+
/sisyphus-set Refactor auth flow exactly as ordered: 1) extract token validation. 2) wire it into login. 3) update tests.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## User commands
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
/goals <topic> Discuss/research/grill a regular goal, then confirm a draft
|
|
82
|
+
/sisyphus <topic> Discuss/grill a Sisyphus-style goal, then confirm a draft
|
|
83
|
+
/goals-set <objective> Immediately create and start a regular goal
|
|
84
|
+
/sisyphus-set <objective> Immediately create and start a Sisyphus-style goal
|
|
85
|
+
/goal-status Show focused goal state
|
|
86
|
+
/goal-list List all open goals in .pi/goals/
|
|
87
|
+
/goal-focus Choose this session's focused goal
|
|
88
|
+
/goal-tweak <change> Draft a revision to the focused active/paused goal
|
|
89
|
+
/goal-pause Pause the focused active goal
|
|
90
|
+
/goal-resume Resume a paused goal
|
|
91
|
+
/goal-settings Configure pi-goal settings, including auditor model settings
|
|
92
|
+
/goal-abort Abort/archive the focused goal or cancel drafting
|
|
93
|
+
/goal-clear Archive the focused goal or cancel drafting
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Pressing `Esc` or aborting an active run pauses the goal so it does not remain falsely active.
|
|
97
|
+
|
|
98
|
+
## Multiple open goals and focus
|
|
99
|
+
|
|
100
|
+
`pi-goal` separates durable goals from session focus:
|
|
101
|
+
|
|
102
|
+
- **Goal pool**: every open goal is an `active_goal_*.md` file under `.pi/goals/`.
|
|
103
|
+
- **Focused goal**: the current pi session has one focused goal id stored in a `pi-goal-focus` custom session entry.
|
|
104
|
+
- **No focus in markdown**: goal files describe the goal itself; they do not record which session is focused on them.
|
|
105
|
+
- **Branch-local focus**: because focus is reconstructed from the current session branch, `/tree` navigation can restore a different focus for a different branch.
|
|
106
|
+
- **One continuation chain**: auto-continue only schedules work for the focused goal in the current session.
|
|
107
|
+
|
|
108
|
+
Creating a goal with `/goals`, `/sisyphus`, `/goals-set`, or `/sisyphus-set` no longer clears other open goals. It creates a new active goal file and focuses it. Use `/goal-list` to inspect open goals and `/goal-focus` to switch the session focus. If the latest focus entry explicitly clears focus, or points at a missing/stale goal, a remaining single open goal is not auto-focused; single-open auto-focus only happens when no focus entry exists at all. If multiple open goals exist and the session has no valid focus, `/goal-resume`, `/goal-clear`, `/goal-abort`, `/goal-pause`, and `/goal-tweak` ask the user to choose a goal instead of acting on all of them.
|
|
109
|
+
|
|
110
|
+
## Agent tools
|
|
111
|
+
|
|
112
|
+
The extension exposes tools only when they make sense for the current lifecycle phase.
|
|
113
|
+
|
|
114
|
+
| Tool | Visible when | Purpose |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| `goal_question` | drafting / tweak drafting | Ask one focused user question |
|
|
117
|
+
| `goal_questionnaire` | drafting / tweak drafting | Ask multiple structured questions |
|
|
118
|
+
| `get_goal` | always | Read the focused goal state; mentions other open goals when present |
|
|
119
|
+
| `propose_goal_draft` | registered; accepted only during goal drafting | Submit a concrete draft for user confirmation |
|
|
120
|
+
| `apply_goal_tweak` | tweak drafting only | Submit a revision to an existing goal |
|
|
121
|
+
| `update_goal` | focused active or paused goal | Mark the focused goal complete when all requirements are satisfied. When the auditor is disabled, supply `confirmBypassAuditor: true` after user confirmation to bypass the audit |
|
|
122
|
+
| `pause_goal` | focused active goal | Pause the focused goal because of a real blocker |
|
|
123
|
+
| `abort_goal` | focused active or paused goal | Abort/archive an obsolete, impossible, unsafe, or user-cancelled focused goal |
|
|
124
|
+
| `step_complete` | hidden / legacy | Compatibility no-op; Sisyphus no longer requires a step counter |
|
|
125
|
+
| `create_goal` | hidden | Direct calls are rejected; normal creation goes through `propose_goal_draft` |
|
|
126
|
+
|
|
127
|
+
## Drafting behavior
|
|
128
|
+
|
|
129
|
+
`/goals` and `/sisyphus` start a lightweight intent discussion, not a heavy runtime sub-state. The agent clarifies, researches, and grills only when needed, may proceed directly for fully specified requests, and then calls `propose_goal_draft` to show the user a Confirm / Continue Chatting dialog. `goal_question` and `goal_questionnaire` are available when structured input helps, but plain conversation is acceptable.
|
|
130
|
+
|
|
131
|
+
`/goals-set` and `/sisyphus-set` skip the discussion and confirmation dialog. They directly create and focus an active goal from the supplied objective so execution can begin immediately.
|
|
132
|
+
|
|
133
|
+
The agent may do minimal read-only reconnaissance when it directly improves the goal contract, but should not begin substantive implementation before confirmation. The strict runtime starts after the user confirms the draft and an active goal is created.
|
|
134
|
+
|
|
135
|
+
When a draft is proposed, the confirmation UI shows a full plain-text report with draft details, the original topic, and the proposed goal. If the confirmation UI throws in interactive mode, creation fails closed and confirmation remains active; it never auto-creates a goal. When a draft is confirmed, the tool result includes the full final objective, not a one-line summary, and normal work tools (`write`, `read`, `bash`, `edit`) are available for execution. This makes the confirmed contract visible in the conversation as well as on disk.
|
|
136
|
+
|
|
137
|
+
While goal confirmation or tweak drafting is active, old goal execution is suspended: active-goal prompts, accounting, and auto-continue checkpoints do not run for the previously focused goal.
|
|
138
|
+
|
|
139
|
+
## Completion behavior
|
|
140
|
+
|
|
141
|
+
Completion is also explicit and is checked by an independent pi auditor agent. The executor calls `update_goal` with its completion claim:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"status": "complete",
|
|
146
|
+
"completionSummary": "What was completed and what evidence proves it."
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Before archiving the goal, `update_goal` starts a separate pi agent in an isolated in-memory session. The auditor receives the objective, the executor's completion claim, and current goal metadata, then can inspect the workspace with read-only-oriented tools (`read`, `grep`, `find`, `ls`, and `bash`). It must end its report with exactly one marker:
|
|
151
|
+
|
|
152
|
+
- `<approved/>` archives the goal as complete.
|
|
153
|
+
- `<disapproved/>`, no marker, an error, or an abort rejects completion and leaves the goal open.
|
|
154
|
+
|
|
155
|
+
The auditor is semantic, not a paperwork checklist: it should reject scaffold-only, alpha, generated-template, proxy-metric, build-only, or weakly verified completions when the real user outcome is not satisfied.
|
|
156
|
+
|
|
157
|
+
By default the auditor uses the current/default pi model. Configure it interactively with `/goal-settings` -> `auditor`, then click `provider`, `model`, or `thinking_level` and type the value directly. The settings are saved to `.pi/goal-auditor.json`. You can also edit the file or override it with environment variables:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"provider": "fireworks",
|
|
162
|
+
"model": "accounts/fireworks/routers/kimi-k2p6-turbo",
|
|
163
|
+
"thinking_level": "high"
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Environment variables `PI_GOAL_AUDITOR_PROVIDER`, `PI_GOAL_AUDITOR_MODEL`, and `PI_GOAL_AUDITOR_THINKING_LEVEL` take precedence over `/goal-settings`.
|
|
168
|
+
|
|
169
|
+
The completion result prints a full report into the conversation:
|
|
170
|
+
|
|
171
|
+
- `Goal complete.`
|
|
172
|
+
- optional completion summary / evidence supplied by the executor
|
|
173
|
+
- the auditor's approval report
|
|
174
|
+
- full current goal details, including objective, status, usage, mode, and file path
|
|
175
|
+
|
|
176
|
+
Sisyphus goals use the same completion tool as regular goals. The stricter part is the prompt/criteria standard: the agent should only call completion after the whole ordered objective is actually satisfied and likely to survive independent auditing. A paused goal can also be completed directly when the agent already has enough evidence that every requirement is satisfied; it does not need a resume just to call `update_goal`.
|
|
177
|
+
|
|
178
|
+
## Schema gates
|
|
179
|
+
|
|
180
|
+
The shipped gates are intentionally small and mechanical.
|
|
181
|
+
|
|
182
|
+
| Gate | Prevents |
|
|
183
|
+
|---|---|
|
|
184
|
+
| Focus consistency | `/goals` accidentally becoming Sisyphus, or `/sisyphus` becoming regular mode |
|
|
185
|
+
| Confirm-before-commit | The agent silently creating or replacing a discussion-based goal |
|
|
186
|
+
| Direct set intent | `/goals-set` and `/sisyphus-set` are explicit user shortcuts that bypass draft confirmation |
|
|
187
|
+
| Completion auditor gate | Archiving completion unless an independent pi auditor agent returns `<approved/>` |
|
|
188
|
+
| Abort gate | Aborting missing, stale, completed, or reasonless goals |
|
|
189
|
+
| Direct-create rejection | Hidden `create_goal` calls creating goals without the confirmation flow |
|
|
190
|
+
| Post-stop block | Continuing to call tools after `pause_goal`, `abort_goal`, `update_goal`, or `apply_goal_tweak` stops the turn |
|
|
191
|
+
| Empty-turn guard | Pure chat loops that would keep auto-continuing without meaningful goal work |
|
|
192
|
+
| Abort pause | Active goals staying active after user abort / Ctrl-C |
|
|
193
|
+
| Disk reconciliation | External pause/archive/delete/status changes being ignored or overwritten by stale memory |
|
|
194
|
+
| Post-compaction reminder | Losing the active objective after session compaction |
|
|
195
|
+
|
|
196
|
+
## Files
|
|
197
|
+
|
|
198
|
+
```text
|
|
199
|
+
.pi/goals/active_goal_<timestamp>_<id>.md
|
|
200
|
+
.pi/goals/archived/goal_<timestamp>_<id>.md
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Multiple `active_goal_*.md` files may exist simultaneously. This is the project-level open goal pool. The selected/focused goal is intentionally not stored in these files; focus lives in session custom state.
|
|
204
|
+
|
|
205
|
+
Each file contains:
|
|
206
|
+
|
|
207
|
+
1. extension-owned JSON metadata;
|
|
208
|
+
2. a user-editable `# Goal Prompt` section;
|
|
209
|
+
3. progress/status information.
|
|
210
|
+
|
|
211
|
+
Before commands, tools, and lifecycle hooks act on a focused goal, the runtime reconciles the focused record against the active goal file on disk. External archive/delete/status changes therefore win over stale in-memory state and cannot resurrect deleted active files. Prompt-body edits are still picked up from the `# Goal Prompt` section; focus is never stored in goal markdown.
|
|
212
|
+
|
|
213
|
+
Goal paths are constrained to `.pi/goals/` and `.pi/goals/archived/`; absolute paths, traversal, NUL bytes, symlinks, and unsafe metadata paths are rejected.
|
|
214
|
+
|
|
215
|
+
## Environment variables
|
|
216
|
+
|
|
217
|
+
| Variable | Default | Purpose |
|
|
218
|
+
|---|---:|---|
|
|
219
|
+
| `PI_GOAL_AUTO_CONFIRM` | unset | When `1`, auto-confirms drafts in headless/test contexts |
|
|
220
|
+
|
|
221
|
+
## Development
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
npm install
|
|
225
|
+
npm test
|
|
226
|
+
npm run check
|
|
227
|
+
npm pack --dry-run
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
The fast unit suite uses Node's built-in test runner and covers core parsing, drafting gates, lifecycle policy, abort policy, questionnaire formatting, centralized tool names, Sisyphus prompt-style behavior, completion reporting, and display helpers.
|
|
231
|
+
|
|
232
|
+
The experiment harness under `experiments/` runs full pi sessions against real model calls and mechanical rubrics.
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
cd experiments
|
|
236
|
+
bash harness/run.sh C1-vague-goal-set --count 3 --grade --no-smoke
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Package contents
|
|
240
|
+
|
|
241
|
+
The npm package ships only the runtime extension, docs, and package metadata. The extension is split into small modules:
|
|
242
|
+
|
|
243
|
+
```text
|
|
244
|
+
extensions/goal.ts orchestration, commands, tools, events, timers
|
|
245
|
+
extensions/goal-record.ts goal record types, normalization, creation helpers
|
|
246
|
+
extensions/goal-pool.ts open-goal pool, focus resolution, list/selector text helpers
|
|
247
|
+
extensions/goal-core.ts display helpers
|
|
248
|
+
extensions/goal-draft.ts lightweight confirmation prompt, proposal validation, drafting tool gate
|
|
249
|
+
extensions/goal-policy.ts lifecycle, pause/resume/complete, and Sisyphus policy
|
|
250
|
+
extensions/goal-auditor.ts independent pi auditor agent for completion approval, config, and progress tracking
|
|
251
|
+
extensions/goal-ledger.ts event append, read, validation, sanitization, and reconstruction
|
|
252
|
+
extensions/goal-questionnaire.ts built-in question UI and question tool registration
|
|
253
|
+
extensions/goal-tool-names.ts centralized published tool names and allowlists
|
|
254
|
+
extensions/prompts/goal-prompts.ts active, continuation, tweak, and stale prompts
|
|
255
|
+
extensions/storage/goal-files.ts goal file paths, serialization, parsing, archive IO
|
|
256
|
+
extensions/widgets/goal-widget.ts above-editor goal beacon component
|
|
257
|
+
extensions/widgets/goal-notifications.ts widget-style notification text
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Design principles
|
|
261
|
+
|
|
262
|
+
- **User owns intent**: only the user starts, replaces, resumes, clears, or confirms goals; the agent may only pause, complete, or abort through schema-gated lifecycle tools with evidence/reason.
|
|
263
|
+
- **One commit path**: normal goal creation goes through drafting and confirmation.
|
|
264
|
+
- **Schema beats prompt walls**: recurring failure modes are handled by validators and tool-call interceptors.
|
|
265
|
+
- **Visible contracts**: confirmed goals and completion reports are printed fully into the conversation.
|
|
266
|
+
- **Lifecycle-shaped tool surface**: the agent sees only tools appropriate to the current phase.
|
|
267
|
+
- **Disk-backed continuity**: goal state survives context churn and can be audited from `.pi/goals/`.
|
|
268
|
+
- **Human-owned focus**: the agent may work on the focused goal, but only user commands/UI selection switch focus.
|
|
269
|
+
|
|
270
|
+
## Divergence from upstream
|
|
271
|
+
|
|
272
|
+
This fork adds the following features beyond `@capyup/pi-goal`:
|
|
273
|
+
|
|
274
|
+
| Feature | Description |
|
|
275
|
+
|---|---|
|
|
276
|
+
| **Auditor progress widget** | Live spinner, current tool tracking, and recent output lines displayed during audit runs |
|
|
277
|
+
| **Escape-to-skip audit** | Press `Escape` during a running audit to abort it; the goal completes as bypassed |
|
|
278
|
+
| **Disable the auditor** | `disabled` flag in `GoalAuditorConfig`, toggleable from `/goal-settings` |
|
|
279
|
+
| **`confirmBypassAuditor`** | `update_goal` accepts `confirmBypassAuditor: true` to skip the auditor without running it |
|
|
280
|
+
| **`audit_skipped` ledger event** | New event type recording `disabled` or `user_aborted` bypasses in the goal ledger |
|
|
281
|
+
| **Audit lifecycle hardening** | Abort signal wiring, escape-key consumption, proper cleanup, and completion-on-abort instead of leaving the goal open |
|
|
282
|
+
|
|
283
|
+
See the git log for the full commit history:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
git log upstream/main..HEAD
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Upstream
|
|
290
|
+
|
|
291
|
+
This repository is a downstream fork of [@capyup/pi-goal](https://github.com/capyup/pi-goal). To sync with upstream changes:
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
git fetch upstream
|
|
295
|
+
git merge upstream/main
|
|
296
|
+
# resolve conflicts, test, commit
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
The `upstream` remote should point to `https://github.com/capyup/pi-goal.git`.
|
|
300
|
+
|
|
301
|
+
## Release policy
|
|
302
|
+
|
|
303
|
+
This repository can be validated locally with tests and packaging checks. Publishing a new npm version, pushing tags, and running `pi update` are explicit release steps and are not part of ordinary implementation goals unless requested.
|
|
304
|
+
|
|
305
|
+
## License
|
|
306
|
+
|
|
307
|
+
MIT
|