@mriekki/project-forge 4.8.0 → 4.8.1
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/README.md +7 -18
- package/assets/components.json +1 -1
- package/assets/generated/ASSEMBLY.json +1 -1
- package/package.json +1 -1
- package/src/cli.mjs +7 -2
package/README.md
CHANGED
|
@@ -103,28 +103,17 @@ The stable descriptor at `chatgpt/current.json` resolves an immutable Project Fo
|
|
|
103
103
|
|
|
104
104
|
`@mriekki/project-forge` is the public distribution for Project Forge engineering assets used by generated projects.
|
|
105
105
|
|
|
106
|
-
Project Forge assembles that package from approved private platform components using exact pinned source
|
|
106
|
+
Project Forge assembles that package from approved private platform components using exact pinned source revisions and deterministic distribution descriptors. Published packages are self-contained; Builders do not need access to the private implementation repositories to install or update managed assets.
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
Generated Projects receive an exact approved package during deterministic generation. Existing generated Projects should normally adopt a newer supported package through:
|
|
109
109
|
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Update to the newest published package:
|
|
115
|
-
|
|
116
|
-
```powershell
|
|
117
|
-
npx @mriekki/project-forge@latest update
|
|
110
|
+
```text
|
|
111
|
+
/project-forge-update
|
|
118
112
|
```
|
|
119
113
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
```powershell
|
|
123
|
-
npx @mriekki/project-forge@latest status
|
|
124
|
-
npx @mriekki/project-forge@latest check
|
|
125
|
-
```
|
|
114
|
+
That Project workflow resolves the supported exact package version and preserves the managed-baseline, drift, review, and delivery guardrails. Do not use a floating `@latest` package update as the normal Builder path: npm publication can intentionally occur before the stable public contract is advanced to the new version.
|
|
126
115
|
|
|
127
|
-
|
|
116
|
+
The package CLI remains available for exact-version troubleshooting and maintainer verification. Use the exact version recorded by the Project or selected by the Project Forge workflow rather than a floating tag.
|
|
128
117
|
|
|
129
118
|
## Maintainer system reference
|
|
130
119
|
|
|
@@ -137,7 +126,7 @@ The system reference deliberately does not duplicate current component SHAs, pac
|
|
|
137
126
|
|
|
138
127
|
## Maintainer release process
|
|
139
128
|
|
|
140
|
-
Project Forge maintainers use a gated release workflow that resolves accepted component
|
|
129
|
+
Project Forge maintainers use a gated release workflow that resolves accepted component revisions, verifies the assembled package, creates the package pull request, verifies CI, and stops at the explicit publication gate.
|
|
141
130
|
|
|
142
131
|
Publication uses npm Trusted Publishing (OIDC), reconstructs the exact package from pinned sources, verifies registry identity and integrity, and smoke-tests the public package from a neutral directory.
|
|
143
132
|
|
package/assets/components.json
CHANGED
package/package.json
CHANGED
package/src/cli.mjs
CHANGED
|
@@ -44,6 +44,11 @@ function inferConsumer(root) {
|
|
|
44
44
|
return path.basename(root);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
export function componentRevisionForDisplay(component) {
|
|
48
|
+
const revision = component?.revision ?? component?.commit;
|
|
49
|
+
return typeof revision === 'string' && revision ? revision : '<unknown revision>';
|
|
50
|
+
}
|
|
51
|
+
|
|
47
52
|
function printPlan(plan, bootstrapMigrations = { rows: [], unsafe: [] }) {
|
|
48
53
|
console.log(`Project Forge profile: ${plan.profileName}`);
|
|
49
54
|
if (bootstrapMigrations.rows.length) {
|
|
@@ -51,7 +56,7 @@ function printPlan(plan, bootstrapMigrations = { rows: [], unsafe: [] }) {
|
|
|
51
56
|
for (const row of bootstrapMigrations.rows) console.log(`${row.state.padEnd(30)} ${row.path}`);
|
|
52
57
|
}
|
|
53
58
|
for (const component of plan.plans) {
|
|
54
|
-
console.log(`\n${component.componentId.toUpperCase()} ${component.component
|
|
59
|
+
console.log(`\n${component.componentId.toUpperCase()} ${componentRevisionForDisplay(component.component)}`);
|
|
55
60
|
for (const row of component.rows) console.log(`${row.state.padEnd(20)} ${row.path}`);
|
|
56
61
|
for (const retired of component.retired) console.log(`${retired.state.padEnd(20)} ${retired.path}`);
|
|
57
62
|
}
|
|
@@ -112,7 +117,7 @@ export async function run(argv = process.argv.slice(2), packageData = loadPackag
|
|
|
112
117
|
console.log(`Available package: ${packageData.pkg.name}@${packageData.pkg.version}`);
|
|
113
118
|
console.log(`Profile: ${installed.profile}`);
|
|
114
119
|
for (const [name, component] of Object.entries(installed.components ?? {})) {
|
|
115
|
-
console.log(`${name}: ${component.version ? component.version + ' @ ' : ''}${component
|
|
120
|
+
console.log(`${name}: ${component.version ? component.version + ' @ ' : ''}${componentRevisionForDisplay(component)}`);
|
|
116
121
|
}
|
|
117
122
|
return 0;
|
|
118
123
|
}
|