forgetrail 0.5.0 → 0.5.2
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.
|
@@ -78,7 +78,7 @@ Do not migrate a working host the user already chose.
|
|
|
78
78
|
| `never-do` | Destructive action, force-push, or history rewrite | [TemperPass](https://temperpass.dev), [IngotVault](https://ingotvault.dev) |
|
|
79
79
|
| `unclear-cause` | Failure is real; cause is not earned | [Gap Last](https://gaplast.dev) |
|
|
80
80
|
| `ship-label` | Product is going public or being handed off | [xFacts](https://xfacts.dev) (AppFacts and neighbors) |
|
|
81
|
-
| `git-backup` |
|
|
81
|
+
| `git-backup` | New project, or unpushed work you cannot lose; before rebase/rewrite | [IngotVault](https://ingotvault.dev) |
|
|
82
82
|
| `voice-journal` | Builder captures ideas by voice, or wants a local journal | [DictaWhisper](https://dictawhisper.com) |
|
|
83
83
|
|
|
84
84
|
---
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
{
|
|
178
178
|
"name": "IngotVault",
|
|
179
179
|
"homepage": "https://ingotvault.dev",
|
|
180
|
-
"offer": "
|
|
180
|
+
"offer": "Before a history rewrite, run ingotvault --repo . so the vault has the current covered refs. Do not git push the backup remote."
|
|
181
181
|
}
|
|
182
182
|
]
|
|
183
183
|
},
|
|
@@ -210,13 +210,13 @@
|
|
|
210
210
|
{
|
|
211
211
|
"id": "git-backup",
|
|
212
212
|
"tier": "A",
|
|
213
|
-
"phases": ["5", "7"],
|
|
214
|
-
"trigger": "
|
|
213
|
+
"phases": ["1", "5", "7"],
|
|
214
|
+
"trigger": "A new project should ask whether this repo is already inside an IngotVault workspace. Also: unpushed local branches or tags the operator cannot afford to lose, or a rebase/rewrite is about to start.",
|
|
215
215
|
"tools": [
|
|
216
216
|
{
|
|
217
217
|
"name": "IngotVault",
|
|
218
218
|
"homepage": "https://ingotvault.dev",
|
|
219
|
-
"offer": "IngotVault mirrors covered local branches and tags to a drive you control. It
|
|
219
|
+
"offer": "IngotVault mirrors covered local branches and tags to a drive you control. It does not run by itself and it does not hook git push. If this repo is already under the vault's workspaceRoot, run ingotvault --repo . after commits. If it is outside, too deep, or excluded, say which and ask before changing config. Do not git push the backup remote. It never modifies origin."
|
|
220
220
|
}
|
|
221
221
|
]
|
|
222
222
|
},
|
package/content/hooks/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Enforces ForgeTrail rules and guards at the host tool level, rather than relying
|
|
|
4
4
|
|
|
5
5
|
## What is in this directory
|
|
6
6
|
|
|
7
|
-
- `guard-shell.mjs`: runs pre-commit verification (`pnpm run verify`), prevents npm/yarn when `pnpm-lock.yaml` is present,
|
|
7
|
+
- `guard-shell.mjs`: runs pre-commit verification (`pnpm run verify`), prevents npm/yarn when `pnpm-lock.yaml` is present, allows `ingotvault` (asks before `--force-with-lease`), asks before any `git push`, and prompts on destructive git or filesystem operations.
|
|
8
8
|
- `guard-edit.mjs`: guards `.env*` secrets files and `specs/completed/**` or `specs/canonical/**` records against accidental mutation.
|
|
9
9
|
- `session-start.mjs`: on session start, points the session at `appledger/`. A writable `workflow_tracking.json` is reported as a legacy conflict, not the live phase.
|
|
10
10
|
- `validate-tracking.mjs`: after editing `workflow_tracking.json`, runs structural validation. A pointer is accepted. A legacy writable document is a conflict.
|
|
@@ -74,6 +74,24 @@ function main() {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
// Local vault updates go through the ingotvault command. Force still asks.
|
|
78
|
+
if (/\bingotvault\b/.test(command)) {
|
|
79
|
+
if (/\s--force-with-lease\b/.test(command)) {
|
|
80
|
+
console.log(
|
|
81
|
+
JSON.stringify({
|
|
82
|
+
permission: "ask",
|
|
83
|
+
user_message:
|
|
84
|
+
"ForgeTrail Safety: ingotvault --force-with-lease rewrites mirror history. Confirm to proceed.",
|
|
85
|
+
agent_message:
|
|
86
|
+
"ingotvault --force-with-lease requires explicit user confirmation.",
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
console.log(JSON.stringify({ permission: "allow" }));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
77
95
|
// 2. Check for git push (Do not push to upstream remote unless explicitly requested by user)
|
|
78
96
|
if (/\bgit\s+push\b/.test(command)) {
|
|
79
97
|
if (/\s+(-f|--force|--force-with-lease)\b/.test(command)) {
|
|
@@ -89,23 +107,13 @@ function main() {
|
|
|
89
107
|
return;
|
|
90
108
|
}
|
|
91
109
|
|
|
92
|
-
// Pushing to IngotVault or local backup mirrors is automatic to preserve work
|
|
93
|
-
const isIngotVaultOrBackup =
|
|
94
|
-
/\bgit\s+push\b.*?\b(backup|ingotvault)\b/i.test(command) ||
|
|
95
|
-
/\bgit\s+push\b.*?(?:[a-zA-Z]:[\\/]|file:\/\/|\.\/|\.\.\/)/i.test(command);
|
|
96
|
-
|
|
97
|
-
if (isIngotVaultOrBackup) {
|
|
98
|
-
console.log(JSON.stringify({ permission: "allow" }));
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
110
|
console.log(
|
|
103
111
|
JSON.stringify({
|
|
104
112
|
permission: "ask",
|
|
105
113
|
user_message:
|
|
106
|
-
"ForgeTrail Safety: git push
|
|
114
|
+
"ForgeTrail Safety: git push requires explicit user approval. Local vault updates use ingotvault --repo .",
|
|
107
115
|
agent_message:
|
|
108
|
-
"git push
|
|
116
|
+
"git push requires explicit user approval. Mirror this repo with ingotvault --repo . instead of git push backup.",
|
|
109
117
|
})
|
|
110
118
|
);
|
|
111
119
|
return;
|
package/docs/NPM.md
CHANGED
|
@@ -10,12 +10,12 @@ Two public unscoped packages:
|
|
|
10
10
|
|
|
11
11
|
| Package | This tree | On npm until you publish | From | What it is |
|
|
12
12
|
| --- | --- | --- | --- | --- |
|
|
13
|
-
| [`forgetrail`](https://www.npmjs.com/package/forgetrail) | 0.5.
|
|
14
|
-
| [`forgetrail-mcp`](https://www.npmjs.com/package/forgetrail-mcp) | 0.4.
|
|
13
|
+
| [`forgetrail`](https://www.npmjs.com/package/forgetrail) | 0.5.1 | 0.5.1 | repo root | CLI + Lite + templates. `pnpm dlx forgetrail install --lite` |
|
|
14
|
+
| [`forgetrail-mcp`](https://www.npmjs.com/package/forgetrail-mcp) | 0.4.1 | 0.4.0 | `mcp-server/` | MCP bin. `pnpm dlx forgetrail-mcp` |
|
|
15
15
|
|
|
16
16
|
These are **installer and MCP channels**, not a library. App repos should not add `forgetrail` to `dependencies`.
|
|
17
17
|
|
|
18
|
-
`0.5.
|
|
18
|
+
`forgetrail@0.5.1` is already on npm. `forgetrail-mcp@0.4.1` is this tree and is not published yet. `0.4.0` remains the registry copy until you publish from `mcp-server/`. `pnpm run pack:check` is the gate. It does not publish.
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -63,7 +63,7 @@ pnpm dlx forgetrail@0.5.0 --help
|
|
|
63
63
|
pnpm dlx forgetrail@0.5.0 install --lite --dry-run
|
|
64
64
|
|
|
65
65
|
# MCP starts; needs content via FORGETRAIL_ROOT or a sibling forgetrail install
|
|
66
|
-
pnpm dlx forgetrail-mcp@0.4.
|
|
66
|
+
pnpm dlx forgetrail-mcp@0.4.1
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
Optional Cursor MCP (content from a `forgetrail` install, or set the path):
|
package/package.json
CHANGED
|
@@ -1,69 +1,70 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "forgetrail",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"private": false,
|
|
5
|
-
"description": "ForgeTrail: a persistent development system for building software with AI agents. CLI, Lite protocol, and methodology templates.",
|
|
6
|
-
"license": "Apache-2.0",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"bin": {
|
|
9
|
-
"forgetrail": "./scripts/forgetrail-cli.mjs"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"scripts/",
|
|
13
|
-
"content/",
|
|
14
|
-
"docs/",
|
|
15
|
-
"prompts/",
|
|
16
|
-
"WORKFLOW.md",
|
|
17
|
-
"TRACKING_SCHEMA.md",
|
|
18
|
-
"workflow_tracking.json",
|
|
19
|
-
"INITIAL_PROMPT.md",
|
|
20
|
-
"CONTINUATION_PROMPT.md",
|
|
21
|
-
"TRY_FORGETRAIL.md",
|
|
22
|
-
"README.md",
|
|
23
|
-
"LICENSE"
|
|
24
|
-
],
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"mcp",
|
|
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
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "forgetrail",
|
|
3
|
+
"version": "0.5.2",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "ForgeTrail: a persistent development system for building software with AI agents. CLI, Lite protocol, and methodology templates.",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"forgetrail": "./scripts/forgetrail-cli.mjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"scripts/",
|
|
13
|
+
"content/",
|
|
14
|
+
"docs/",
|
|
15
|
+
"prompts/",
|
|
16
|
+
"WORKFLOW.md",
|
|
17
|
+
"TRACKING_SCHEMA.md",
|
|
18
|
+
"workflow_tracking.json",
|
|
19
|
+
"INITIAL_PROMPT.md",
|
|
20
|
+
"CONTINUATION_PROMPT.md",
|
|
21
|
+
"TRY_FORGETRAIL.md",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"workspace:index": "node scripts/workspace-index.mjs",
|
|
27
|
+
"install:forgetrail": "node scripts/install-forgetrail.mjs",
|
|
28
|
+
"install:lite": "node scripts/install-forgetrail-lite.mjs",
|
|
29
|
+
"link:global": "node scripts/link-global.mjs",
|
|
30
|
+
"mcp": "node scripts/mcp-status.mjs dev",
|
|
31
|
+
"mcp:build": "node scripts/mcp-status.mjs build",
|
|
32
|
+
"mcp:status": "node scripts/mcp-status.mjs status",
|
|
33
|
+
"mcp:ping": "node scripts/mcp-status.mjs ping",
|
|
34
|
+
"mcp:cursor-config": "node scripts/mcp-status.mjs cursor-config",
|
|
35
|
+
"mcp:inspector": "node scripts/mcp-status.mjs inspector",
|
|
36
|
+
"ship": "pnpm --dir site run ship",
|
|
37
|
+
"site:dev": "pnpm --dir site dev",
|
|
38
|
+
"site:build": "pnpm --dir site run build",
|
|
39
|
+
"site:deploy": "pnpm --dir site run ship",
|
|
40
|
+
"pack:check": "node scripts/publish-gate.mjs",
|
|
41
|
+
"prepublishOnly": "node scripts/publish-gate.mjs"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=20"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"forgetrail",
|
|
48
|
+
"mcp",
|
|
49
|
+
"ai-agents",
|
|
50
|
+
"cursor",
|
|
51
|
+
"claude",
|
|
52
|
+
"methodology",
|
|
53
|
+
"lite"
|
|
54
|
+
],
|
|
55
|
+
"author": {
|
|
56
|
+
"name": "Catalyst Forge LLC",
|
|
57
|
+
"url": "https://catalystforge.com"
|
|
58
|
+
},
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/Catalyst-Forge-LLC/forgetrail.git"
|
|
62
|
+
},
|
|
63
|
+
"bugs": {
|
|
64
|
+
"url": "https://github.com/Catalyst-Forge-LLC/forgetrail/issues"
|
|
65
|
+
},
|
|
66
|
+
"homepage": "https://forgetrail.dev",
|
|
67
|
+
"publishConfig": {
|
|
68
|
+
"access": "public"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
File without changes
|