forge-orkes 0.58.2 → 0.58.3
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/package.json
CHANGED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Migration Guide: Render-on-read state registries (Forge 0.53.0)
|
|
2
|
+
|
|
3
|
+
Applies to projects whose derived registries — `.forge/state/index.yml` and/or
|
|
4
|
+
`.forge/streams/active.yml` — are still **git-tracked**. Both files were already
|
|
5
|
+
`DERIVED / DO NOT HAND-EDIT` projections; 0.53.0 makes them **git-ignored
|
|
6
|
+
render-on-read caches**: regenerated at every `forge` boot from their sources and
|
|
7
|
+
**never committed**. Because the value is computed on read and never stored in
|
|
8
|
+
git, the two-registry drift class — a committed projection going stale against
|
|
9
|
+
its source (e.g. a committed `active.yml` phase reading `researching` while the
|
|
10
|
+
milestone had moved to `discussing`) — can no longer occur.
|
|
11
|
+
|
|
12
|
+
Sources are unchanged: `index.yml` ← `.forge/state/milestone-*.yml` (Rollup 1.0);
|
|
13
|
+
`active.yml` ← `.forge/streams/*.yml` + active milestones (Stream Rollup). Only
|
|
14
|
+
the *storage* changes — tracked file → local cache.
|
|
15
|
+
|
|
16
|
+
Projects that never committed these files (fresh 0.53.0+ installs) need nothing.
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
1. On the new version's framework files (`npx forge-orkes upgrade`, or the
|
|
21
|
+
`upgrading` skill) — so the updated `.gitignore` entries and the render-then-read
|
|
22
|
+
`deferred`/`planning` skills are present.
|
|
23
|
+
2. Working tree clean or changes committed — the migration stops tracking two
|
|
24
|
+
files and edits `.gitignore`.
|
|
25
|
+
|
|
26
|
+
## Detection
|
|
27
|
+
|
|
28
|
+
Keyed on **git-tracking state**, not a content grep: the `DERIVED / DO NOT
|
|
29
|
+
HAND-EDIT` header is identical before and after, so only `git ls-files` can tell
|
|
30
|
+
a committed-pre-0.53.0 registry from a git-ignored-post-0.53.0 one. Fires while
|
|
31
|
+
either registry is still tracked; silent once both are untracked (already
|
|
32
|
+
migrated), and silent in a non-Forge / non-git tree:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || exit 0
|
|
36
|
+
migrate=0
|
|
37
|
+
for f in .forge/state/index.yml .forge/streams/active.yml; do
|
|
38
|
+
if git ls-files --error-unmatch "$f" >/dev/null 2>&1; then
|
|
39
|
+
echo "MIGRATE — $f is still git-tracked (pre-0.53.0); render-on-read makes it a git-ignored cache regenerated at boot"
|
|
40
|
+
migrate=1
|
|
41
|
+
fi
|
|
42
|
+
done
|
|
43
|
+
[ "$migrate" -eq 0 ] && exit 0
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Migration steps
|
|
47
|
+
|
|
48
|
+
### 1. Stop tracking the two registries (keep them on disk)
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git rm --cached .forge/state/index.yml .forge/streams/active.yml 2>/dev/null
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`--cached` removes them from the index only — the working-copy files stay as a
|
|
55
|
+
local cache and are re-rendered on the next boot. (If either was never tracked,
|
|
56
|
+
the command is a harmless no-op for that path.)
|
|
57
|
+
|
|
58
|
+
### 2. Git-ignore both derived registries
|
|
59
|
+
|
|
60
|
+
Add to the project's root `.gitignore` (paths relative to the repo root):
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
.forge/state/index.yml
|
|
64
|
+
.forge/streams/active.yml
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Consumer projects created from `create-forge` instead gain these under
|
|
68
|
+
`.forge/.gitignore` (paths relative to `.forge/`):
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
state/index.yml
|
|
72
|
+
streams/active.yml
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Without this, the next `git add .forge/` would re-commit the caches and reopen
|
|
76
|
+
the drift class.
|
|
77
|
+
|
|
78
|
+
### 3. Confirm the readers render-then-read
|
|
79
|
+
|
|
80
|
+
`forge` boot and `chief-of-staff` already render before reading. In 0.53.0 the
|
|
81
|
+
two direct readers are converted too: `deferred` and `planning` no longer treat a
|
|
82
|
+
missing `index.yml` as "not a Forge project" — the project sentinel moved to the
|
|
83
|
+
committed `.forge/project.yml`, and they derive milestone state from
|
|
84
|
+
`.forge/state/milestone-*.yml` (rendering the cache first) when `index.yml` is
|
|
85
|
+
absent. These ship with the framework upgrade; no per-project edit is needed.
|
|
86
|
+
|
|
87
|
+
### 4. Regenerate the caches
|
|
88
|
+
|
|
89
|
+
Run `/forge` (boot) — it runs Rollup 1.0 and the Stream Rollup and rewrites both
|
|
90
|
+
files from their sources. From here they are regenerated on read, never committed.
|
|
91
|
+
|
|
92
|
+
## Validation
|
|
93
|
+
|
|
94
|
+
- `git ls-files --error-unmatch .forge/state/index.yml` exits **non-zero**
|
|
95
|
+
(untracked); same for `.forge/streams/active.yml`.
|
|
96
|
+
- `git check-ignore .forge/state/index.yml` and `git check-ignore
|
|
97
|
+
.forge/streams/active.yml` each exit **0** (ignored).
|
|
98
|
+
- Both files still exist on disk after a `/forge` boot (rendered cache).
|
|
99
|
+
- A fresh clone with no prior boot: `deferred` and `planning` do **not** print
|
|
100
|
+
"No forge state found" (they key the sentinel on `project.yml`).
|
|
101
|
+
- Editing a milestone's phase and booting yields an `active.yml` whose row phase
|
|
102
|
+
matches the milestone — the projection can no longer be stale, because it is
|
|
103
|
+
never stored.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Migration Guide: Render-on-read registries catch-up (Forge 0.58.3)
|
|
2
|
+
|
|
3
|
+
Applies to projects that upgraded **across 0.53.0 while the 0.53.0 migration
|
|
4
|
+
guide was missing from the shipped template** (missing 0.53.0–0.58.2; restored
|
|
5
|
+
in 0.58.3). For those projects, `/upgrading` Step 7's version-range detection
|
|
6
|
+
(`installed < v <= source`) fired for the crossed range but had no
|
|
7
|
+
`0.53.0-*.md` guide on disk to surface — so the render-on-read registry
|
|
8
|
+
migration (untrack `.forge/state/index.yml` + `.forge/streams/active.yml`) was
|
|
9
|
+
silently skipped, and range detection never looks backward at an
|
|
10
|
+
already-crossed version. Host-verified on ptnrkit: stamped 0.58.2 with both
|
|
11
|
+
derived registries still git-tracked and actively committed.
|
|
12
|
+
|
|
13
|
+
This guide exists solely to re-surface that skipped migration. It re-runs the
|
|
14
|
+
same detection; the actual steps live in the (now-delivered)
|
|
15
|
+
`0.53.0-render-on-read-registries.md` alongside this file.
|
|
16
|
+
|
|
17
|
+
## Detection
|
|
18
|
+
|
|
19
|
+
Identical to the 0.53.0 guide — keyed on git-tracking state. Silent once both
|
|
20
|
+
registries are untracked (migrated, or a fresh ≥0.53.0 install):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || exit 0
|
|
24
|
+
migrate=0
|
|
25
|
+
for f in .forge/state/index.yml .forge/streams/active.yml; do
|
|
26
|
+
if git ls-files --error-unmatch "$f" >/dev/null 2>&1; then
|
|
27
|
+
echo "MIGRATE — $f is still git-tracked; the 0.53.0 render-on-read migration was skipped"
|
|
28
|
+
migrate=1
|
|
29
|
+
fi
|
|
30
|
+
done
|
|
31
|
+
[ "$migrate" -eq 0 ] && echo "OK — already migrated (or never tracked the registries)"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Steps
|
|
35
|
+
|
|
36
|
+
Detection fired → follow `0.53.0-render-on-read-registries.md` (same
|
|
37
|
+
directory) end to end: `git rm --cached` the two registries, gitignore them
|
|
38
|
+
(root `.gitignore`, or `state/index.yml` + `streams/active.yml` in
|
|
39
|
+
`.forge/.gitignore` for create-forge installs), then boot `/forge` to
|
|
40
|
+
regenerate the caches. Its Validation section applies unchanged.
|
|
41
|
+
|
|
42
|
+
Detection silent → nothing to do; this guide is a no-op.
|