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` | Unpushed work you cannot lose; before rebase/rewrite | [IngotVault](https://ingotvault.dev) |
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": "IngotVault takes an immutable local snapshot before risky git operations or rewrites."
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": "Unpushed local branches or tags the operator cannot afford to lose, or a rebase/rewrite is about to start.",
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 never modifies origin. It does not replace commit discipline."
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
  },
@@ -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, gates `git push` to upstream remotes (pushing to IngotVault or local backup mirrors is allowed automatically), and prompts on destructive git or filesystem operations.
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 to upstream remote requires explicit user approval per project rules. Would you like to push?",
114
+ "ForgeTrail Safety: git push requires explicit user approval. Local vault updates use ingotvault --repo .",
107
115
  agent_message:
108
- "git push to upstream remote requires explicit user approval per project rules.",
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.0 | 0.4.20 | repo root | CLI + Lite + templates. `pnpm dlx forgetrail install --lite` |
14
- | [`forgetrail-mcp`](https://www.npmjs.com/package/forgetrail-mcp) | 0.4.0 | 0.3.10 | `mcp-server/` | MCP bin. `pnpm dlx forgetrail-mcp` |
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.0` stops installing `workflow_tracking.json`. `0.4.0` tells kickoff to run `appledger init`. The registry copies above do not include that cutover. `pnpm run pack:check` is the gate. It does not publish.
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.0
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.0",
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
- "engines": {
26
- "node": ">=20"
27
- },
28
- "keywords": [
29
- "forgetrail",
30
- "mcp",
31
- "ai-agents",
32
- "cursor",
33
- "claude",
34
- "methodology",
35
- "lite"
36
- ],
37
- "author": {
38
- "name": "Catalyst Forge LLC",
39
- "url": "https://catalystforge.com"
40
- },
41
- "repository": {
42
- "type": "git",
43
- "url": "git+https://github.com/Catalyst-Forge-LLC/forgetrail.git"
44
- },
45
- "bugs": {
46
- "url": "https://github.com/Catalyst-Forge-LLC/forgetrail/issues"
47
- },
48
- "homepage": "https://forgetrail.dev",
49
- "publishConfig": {
50
- "access": "public"
51
- },
52
- "scripts": {
53
- "workspace:index": "node scripts/workspace-index.mjs",
54
- "install:forgetrail": "node scripts/install-forgetrail.mjs",
55
- "install:lite": "node scripts/install-forgetrail-lite.mjs",
56
- "link:global": "node scripts/link-global.mjs",
57
- "mcp": "node scripts/mcp-status.mjs dev",
58
- "mcp:build": "node scripts/mcp-status.mjs build",
59
- "mcp:status": "node scripts/mcp-status.mjs status",
60
- "mcp:ping": "node scripts/mcp-status.mjs ping",
61
- "mcp:cursor-config": "node scripts/mcp-status.mjs cursor-config",
62
- "mcp:inspector": "node scripts/mcp-status.mjs inspector",
63
- "ship": "pnpm --dir site run ship",
64
- "site:dev": "pnpm --dir site dev",
65
- "site:build": "pnpm --dir site run build",
66
- "site:deploy": "pnpm --dir site run ship",
67
- "pack:check": "node scripts/publish-gate.mjs"
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