@echelon-foundry/visual-engineering 1.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,39 @@
1
+ # Changelog
2
+
3
+ This file covers `@echelon-foundry/visual-engineering` and its six platform packages. The
4
+ research context published as `@kemiller2002/visual-engineering-context` has its own release
5
+ line and is not tracked here.
6
+
7
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
8
+ follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
+
10
+ ## 1.0.0
11
+
12
+ First public release.
13
+
14
+ ### Added
15
+
16
+ - The `init`, `status`, `verify`, `upgrade` and `doctor` lifecycle commands, plus `--help` and
17
+ `--version`, and `--dry-run`, `--check`, `--force`, `--json`, `--verbose`, `--strict` and
18
+ `--repo` where each applies.
19
+ - An F# implementation: `VisualEngineering.Core` owns every lifecycle decision and is callable
20
+ without simulating command line input; `VisualEngineering.Cli` is a thin adapter. Node is
21
+ present only as the launcher that selects and starts the packaged executable.
22
+ - A typed installation state model (`NotInstalled`, `Installed`, `UpgradeRequired`, `Invalid`).
23
+ - A file ownership model (`tool-owned`, `generated`, `user-owned`, `shared`) recorded per path
24
+ in the installation manifest with the hash of what the tool last wrote.
25
+ - An installation manifest at `.echelon/visual-engineering.json` and repository configuration
26
+ at `.echelon/visual-engineering.config.json`, both schema versioned.
27
+ - Sequential migrations with preconditions, covering adoption of a pre-Echelon `ve-context`
28
+ installation (configuration version 1) through to the current configuration version 3.
29
+ - Machine readable output on every command behind `--json`, sharing one versioned envelope.
30
+ - Stable exit codes 0 to 7, documented in `--help`, the README and `docs/cli.md`.
31
+ - Distribution as a small root package plus one optional dependency per platform, so an install
32
+ downloads roughly 7 MB rather than every platform's executable.
33
+
34
+ ### Compatibility
35
+
36
+ - The `@kemiller2002/visual-engineering-context` package, the GitHub Pages context feed and the
37
+ immutable `ui-context-v*` releases are unchanged and remain supported.
38
+ - A repository previously set up by `ve-context sync` is detected as configuration version 1 and
39
+ adopted in place by `upgrade`. Its files are kept and nothing is deleted.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kevin Miller
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,420 @@
1
+ # @echelon-foundry/visual-engineering
2
+
3
+ Echelon Foundry Visual Engineering repository initialization, verification, diagnostics, and upgrade tooling.
4
+
5
+ It installs the Visual Engineering UI research context into a repository so that people and
6
+ implementation agents design, build and review interfaces from current evidence instead of
7
+ from copied snapshots. The tool owns the whole lifecycle of that installation: it detects the
8
+ current state, installs, verifies, diagnoses and upgrades it, and records what it manages.
9
+
10
+ ## Requirements
11
+
12
+ - **Node.js 20 or newer.** Node is only used to start the packaged executable.
13
+ - **Nothing else.** The executable is self contained: no .NET runtime, no compiler, no global
14
+ tooling. After installation nothing is downloaded — the research context travels inside the
15
+ package — so it works on an offline or air-gapped machine.
16
+ - Linux, macOS or Windows on x64 or arm64. See
17
+ [supported environments](#supported-environments).
18
+
19
+ ## Installation
20
+
21
+ Pick whichever fits how you work. All three give you the same `visual-engineering` command.
22
+
23
+ ### Run it without installing
24
+
25
+ ```bash
26
+ npx @echelon-foundry/visual-engineering init
27
+ ```
28
+
29
+ `npx` downloads the package on first use and caches it, so later runs start immediately. Best
30
+ for trying it out and for one-off runs. To pin a version rather than following the latest
31
+ release:
32
+
33
+ ```bash
34
+ npx @echelon-foundry/visual-engineering@1.0.0 init
35
+ ```
36
+
37
+ ### Add it to a project (recommended for teams and CI)
38
+
39
+ ```bash
40
+ npm install --save-dev @echelon-foundry/visual-engineering
41
+ ```
42
+
43
+ Then run it through your package manager, which uses the exact version in your lockfile:
44
+
45
+ ```bash
46
+ npx visual-engineering status
47
+ ```
48
+
49
+ This is the reproducible option: everyone on the project, and every CI run, uses the same
50
+ version until you deliberately update it. Add a script if you run it often:
51
+
52
+ ```json
53
+ {
54
+ "scripts": {
55
+ "ve:verify": "visual-engineering verify --strict"
56
+ }
57
+ }
58
+ ```
59
+
60
+ ### Install it globally
61
+
62
+ ```bash
63
+ npm install --global @echelon-foundry/visual-engineering
64
+ visual-engineering --version
65
+ ```
66
+
67
+ Best if you work across many repositories. The command is then on your `PATH` everywhere.
68
+
69
+ ## Quick start
70
+
71
+ From the root of the repository you want to set up:
72
+
73
+ ```bash
74
+ npx @echelon-foundry/visual-engineering init
75
+ ```
76
+
77
+ ```text
78
+ Applied 13 change(s).
79
+ ```
80
+
81
+ Confirm what you got:
82
+
83
+ ```bash
84
+ npx @echelon-foundry/visual-engineering status
85
+ ```
86
+
87
+ ```text
88
+ Visual Engineering
89
+
90
+ CLI version: 1.0.0
91
+ Installed version: 1.0.0
92
+ Configuration: version 3 (valid)
93
+ Context: 1.0.0
94
+ Installation state: installed
95
+ Required artifacts: valid
96
+ Integration: valid
97
+ Verification: passed
98
+ Upgrade: none
99
+
100
+ Context directory: .visual-engineering
101
+ Manifest: .echelon/visual-engineering.json
102
+ Research documents: 97
103
+ ```
104
+
105
+ Check it is intact at any time:
106
+
107
+ ```bash
108
+ npx @echelon-foundry/visual-engineering verify
109
+ ```
110
+
111
+ ```text
112
+ Verification passed.
113
+ ```
114
+
115
+ `init` is safe to run repeatedly. A second run when nothing needs to change reports
116
+ `Visual Engineering is already up to date. No changes required.` and rewrites nothing — not one
117
+ file, not one timestamp.
118
+
119
+ Want to see what it would do before it does anything?
120
+
121
+ ```bash
122
+ npx @echelon-foundry/visual-engineering init --dry-run
123
+ ```
124
+
125
+ ### What just happened
126
+
127
+ `init` installed the Visual Engineering UI research briefing into `.visual-engineering/`,
128
+ recorded what it manages in `.echelon/visual-engineering.json`, added a managed block to your
129
+ `.gitignore` so the context is not committed, and registered a managed block in `AGENTS.md`
130
+ telling coding agents to read the briefing before doing UI work. Your own content in those two
131
+ files is untouched. The next section lists every path.
132
+
133
+ ## What it installs
134
+
135
+ | Path | Ownership | Purpose |
136
+ | --- | --- | --- |
137
+ | `.visual-engineering/AGENT-INSTRUCTIONS.md` | tool-owned | How an agent should use the briefing |
138
+ | `.visual-engineering/UI-FOUNDATIONS.md` | tool-owned | Evidence based UI foundations |
139
+ | `.visual-engineering/UI-DECISION-CHECKLIST.md` | tool-owned | Decision checklist |
140
+ | `.visual-engineering/UI-ANTI-PATTERNS.md` | tool-owned | Anti patterns |
141
+ | `.visual-engineering/RESEARCH-INDEX.md` | generated | Source linked index of current research |
142
+ | `.visual-engineering/sources.json` | generated | Provenance records |
143
+ | `.visual-engineering/context.json` | generated | Context manifest and integrity metadata |
144
+ | `.echelon/visual-engineering.json` | tool-owned | Installation manifest |
145
+ | `.echelon/visual-engineering.config.json` | shared | Repository configuration |
146
+ | `.gitignore` | shared | Managed region ignoring the context directory |
147
+ | `AGENTS.md` | shared | Managed region registering the briefing with agents |
148
+
149
+ Shared files are only partly the tool's: it owns a region delimited by
150
+ `echelon:visual-engineering` markers, or a set of reserved JSON keys, and copies everything else
151
+ through untouched. See [docs/ownership.md](docs/ownership.md).
152
+
153
+ ## Supported environments
154
+
155
+ | Platform | Architectures |
156
+ | --- | --- |
157
+ | Linux | x64, arm64 |
158
+ | macOS | x64 (Intel), arm64 (Apple silicon) |
159
+ | Windows | x64, arm64 |
160
+
161
+ Any other platform fails immediately with exit code 7.
162
+
163
+ Each platform's executable ships in its own package, declared as an optional dependency of this
164
+ one and marked with the `os` and `cpu` it runs on. npm installs only the one your machine can
165
+ run, so an install downloads about 7 MB rather than all six executables:
166
+
167
+ | Package | Download |
168
+ | --- | --- |
169
+ | `@echelon-foundry/visual-engineering` | under 1 MB (launcher, research context, docs) |
170
+ | `@echelon-foundry/visual-engineering-<platform>` | about 7 MB (one executable) |
171
+
172
+ The six platform packages are `-linux-x64`, `-linux-arm64`, `-osx-x64`, `-osx-arm64`,
173
+ `-win-x64` and `-win-arm64`. You never name them directly; npm resolves the right one. If you
174
+ install with `--omit=optional`, add the one you need explicitly.
175
+
176
+ ## Commands
177
+
178
+ | Command | Changes the repository | Purpose |
179
+ | --- | --- | --- |
180
+ | `init` | yes | Bring the repository into a valid installed state |
181
+ | `status` | no | Report installation state |
182
+ | `verify` | no | Validate that the installation is correct |
183
+ | `upgrade` | yes | Move an existing installation to this release |
184
+ | `doctor` | no | Explain what is wrong and how to fix it |
185
+
186
+ Global options: `--help`, `--version`, `--repo <path>`, `--json`, `--verbose`.
187
+ `init` and `upgrade` also accept `--dry-run`, `--check` and `--force`.
188
+ `verify` and `doctor` also accept `--strict`.
189
+
190
+ Full reference: [docs/cli.md](docs/cli.md).
191
+
192
+ ### init
193
+
194
+ ```bash
195
+ npx @echelon-foundry/visual-engineering init
196
+ npx @echelon-foundry/visual-engineering init --dry-run
197
+ npx @echelon-foundry/visual-engineering init --check
198
+ ```
199
+
200
+ `init` means *bring this repository into a valid installed state*, not *copy some files*. It
201
+ inspects the repository, determines the current installation state, calculates the changes,
202
+ detects conflicts, applies the changes, writes the installation manifest, and verifies the
203
+ result.
204
+
205
+ It may create or update the tool-owned, generated and shared paths listed above. It never
206
+ modifies user-owned files, never edits content outside a managed region, and refuses to replace
207
+ tool maintained content that was modified locally unless `--force` is given. See
208
+ [docs/installation.md](docs/installation.md).
209
+
210
+ ### status
211
+
212
+ ```bash
213
+ npx @echelon-foundry/visual-engineering status
214
+ npx @echelon-foundry/visual-engineering status --json
215
+ ```
216
+
217
+ Reports the tool name, CLI version, installed version, configuration version, installation
218
+ state, artifact status, integration status, verification status and any available upgrade.
219
+ `status` never modifies the repository.
220
+
221
+ ### verify
222
+
223
+ ```bash
224
+ npx @echelon-foundry/visual-engineering verify
225
+ npx @echelon-foundry/visual-engineering verify --strict
226
+ ```
227
+
228
+ Default mode asks whether the installation is internally consistent: every required file
229
+ present, nothing modified locally, the packaged context intact. An installation that is
230
+ consistent but older than this release still passes.
231
+
232
+ `--strict` additionally requires the installation to be exactly what this release would
233
+ produce: no stale files and no pending upgrade.
234
+
235
+ Exit code `0` means valid; a non-zero code means invalid.
236
+
237
+ ### upgrade
238
+
239
+ ```bash
240
+ npx @echelon-foundry/visual-engineering upgrade
241
+ npx @echelon-foundry/visual-engineering upgrade --dry-run
242
+ ```
243
+
244
+ Upgrades run one configuration version at a time (`1 -> 2 -> 3`), each with its own
245
+ preconditions. The upgrade stops at the first precondition failure and reports exactly what
246
+ happened rather than leaving the repository half migrated. See
247
+ [docs/upgrading.md](docs/upgrading.md).
248
+
249
+ ### doctor
250
+
251
+ ```bash
252
+ npx @echelon-foundry/visual-engineering doctor
253
+ npx @echelon-foundry/visual-engineering doctor --json
254
+ ```
255
+
256
+ `doctor` explains *why* something is wrong and how to fix it. Findings are classified as
257
+ `error`, `warning` or `information`; not every deviation is an error.
258
+
259
+ ### Dry run
260
+
261
+ `init --dry-run` and `upgrade --dry-run` inspect the repository, calculate the full plan,
262
+ validate it, report what would change, and write nothing. Combine with `--json` for automation.
263
+
264
+ ## Machine readable output
265
+
266
+ Every command accepts `--json`. With `--json`, stdout carries a single JSON document and
267
+ nothing else; diagnostics go to stderr. Every document shares one envelope:
268
+
269
+ ```json
270
+ {
271
+ "schemaVersion": 1,
272
+ "tool": "visual-engineering",
273
+ "package": "@echelon-foundry/visual-engineering",
274
+ "command": "status",
275
+ "cliVersion": "1.0.0",
276
+ "exitCode": 0
277
+ }
278
+ ```
279
+
280
+ Schemas are versioned: a breaking change increments `schemaVersion`. Documented in
281
+ [docs/cli.md](docs/cli.md#json-output).
282
+
283
+ ## Exit codes
284
+
285
+ | Code | Meaning |
286
+ | --- | --- |
287
+ | 0 | Success |
288
+ | 1 | Internal failure |
289
+ | 2 | Invalid arguments |
290
+ | 3 | Verification failed |
291
+ | 4 | Changes are required (`--check`) |
292
+ | 5 | Installation blocked (conflict or failed migration precondition) |
293
+ | 6 | Environment or packaging failure |
294
+ | 7 | Unsupported platform |
295
+
296
+ ## CI usage
297
+
298
+ ```yaml
299
+ - name: Verify Visual Engineering context
300
+ run: npx --yes @echelon-foundry/visual-engineering@latest verify --strict
301
+ ```
302
+
303
+ `verify --strict` exits non-zero when the installation is missing, damaged, or behind the
304
+ release being used, which makes it a drift gate. To fail a build when `init` would change
305
+ something without writing anything:
306
+
307
+ ```bash
308
+ npx @echelon-foundry/visual-engineering init --check # exit 4 when changes are required
309
+ ```
310
+
311
+ ## Agent usage
312
+
313
+ Every command is non-interactive and never prompts. For agents and scripts:
314
+
315
+ ```bash
316
+ npx @echelon-foundry/visual-engineering status --json
317
+ npx @echelon-foundry/visual-engineering init --dry-run --json
318
+ npx @echelon-foundry/visual-engineering doctor --json
319
+ ```
320
+
321
+ Destructive replacement of locally modified content is never assumed: it requires the explicit
322
+ `--force` flag. Parse `exitCode` from the JSON document or read the process exit code; both
323
+ carry the same value.
324
+
325
+ ## Configuration and installation manifest
326
+
327
+ - Configuration: `.echelon/visual-engineering.config.json` (shared; the tool owns
328
+ `schemaVersion`, `tool`, `configurationVersion`, `contextDirectory` and `integrations`, and
329
+ preserves any other key you add).
330
+ - Installation manifest: `.echelon/visual-engineering.json` (tool-owned). It records the
331
+ installed version, configuration version, context version and the ownership and content hash
332
+ of every managed path. It contains no secrets, no machine specific values, and no timestamps.
333
+
334
+ `.echelon/` is the shared Echelon Foundry root. Each Echelon tool owns one manifest inside it
335
+ and they coexist without conflicting.
336
+
337
+ ## Compatibility
338
+
339
+ This package is additive. The previous distribution channels are unchanged and still supported:
340
+
341
+ - **Recommended:** `npx @echelon-foundry/visual-engineering <command>`.
342
+ - **Supported (legacy compatibility):** the `@kemiller2002/visual-engineering-context` npm
343
+ package (`ve-context sync|verify|status|show`), the GitHub Pages context feed, and the
344
+ immutable `ui-context-v*` GitHub Releases. See
345
+ [packages/visual-engineering-context/README.md](packages/visual-engineering-context/README.md)
346
+ and [agent-context/README.md](agent-context/README.md).
347
+
348
+ A repository installed by `ve-context sync` is detected as configuration version 1 and is
349
+ migrated in place by `upgrade`, preserving its files.
350
+
351
+ ## Development
352
+
353
+ ```bash
354
+ dotnet restore VisualEngineering.sln
355
+ dotnet build VisualEngineering.sln -c Release
356
+ dotnet test VisualEngineering.sln
357
+ ```
358
+
359
+ The implementation is F#. `src/VisualEngineering.Core` owns every lifecycle decision and is
360
+ callable without simulating command line input; `src/VisualEngineering.Cli` is a thin adapter.
361
+ The Node launcher contains no lifecycle logic. See
362
+ [docs/development.md](docs/development.md).
363
+
364
+ ### Testing
365
+
366
+ ```bash
367
+ dotnet test VisualEngineering.sln # unit and lifecycle tests
368
+ npm run tool:test-package # tests the actual packed npm artifact
369
+ ```
370
+
371
+ ### Packaging
372
+
373
+ ```bash
374
+ npm ci
375
+ npm run research:build # generate the research catalog
376
+ npm run context:build # generate the context payload
377
+ npm run tool:build # publish the F# CLI and stage all seven packages
378
+ npm run tool:build -- --rid linux-x64 # or stage one platform, much faster
379
+ npm run tool:pack # npm pack --dry-run, review the root contents
380
+ npm run tool:test-package # pack, install and exercise the real archives
381
+ ```
382
+
383
+ ### Release
384
+
385
+ Releases are produced by `.github/workflows/publish-visual-engineering-tool.yml`, which builds,
386
+ tests, packs, exercises the packed archive against temporary repositories on Linux, macOS and
387
+ Windows, and only then publishes. See [docs/releasing.md](docs/releasing.md).
388
+
389
+ ## Troubleshooting
390
+
391
+ | Symptom | Cause | Fix |
392
+ | --- | --- | --- |
393
+ | `unsupported platform` (exit 7) | No binary for this platform/architecture | Use a supported platform from the table above |
394
+ | `the executable for ... is missing` (exit 6) | The platform package was not installed, usually from `--omit=optional` | Reinstall, or add `@echelon-foundry/visual-engineering-<platform>` explicitly |
395
+ | `... was modified locally` (exit 5) | Tool maintained content was edited | Restore the file, or rerun with `--force` |
396
+ | `the managed '...' region ... was edited locally` (exit 5) | Edits inside the managed markers | Move edits outside the markers, or rerun with `--force` |
397
+ | `verify` fails only with `--strict` | The installation is behind this release | `npx @echelon-foundry/visual-engineering upgrade` |
398
+
399
+ Run `npx @echelon-foundry/visual-engineering doctor --verbose` for an explanation of any state.
400
+
401
+ ## Documentation
402
+
403
+ - [docs/installation.md](docs/installation.md) — initialization semantics in detail
404
+ - [docs/cli.md](docs/cli.md) — command, option, JSON and exit code reference
405
+ - [docs/upgrading.md](docs/upgrading.md) — migration model and guarantees
406
+ - [docs/ownership.md](docs/ownership.md) — file ownership model
407
+ - [docs/development.md](docs/development.md) — architecture and contributor workflow
408
+ - [docs/releasing.md](docs/releasing.md) — release and publishing process
409
+ - [CHANGELOG.md](CHANGELOG.md) — what changed in each release
410
+
411
+ ## About this repository
412
+
413
+ This repository is also the Visual Engineering research knowledge base: the canonical research
414
+ lives in `content/`, the published site is generated by
415
+ [research-publisher](https://github.com/kemiller2002/research-publisher), and the operational
416
+ briefing in `agent-context/` is the human maintained source of the context this package ships.
417
+
418
+ ## License
419
+
420
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ // Minimal launcher. It resolves the packaged executable for this platform and hands over.
5
+ // It contains no lifecycle logic: what to install, what repository state means, what is
6
+ // valid and what must be migrated are decided by the F# implementation it launches.
7
+
8
+ const { spawnSync } = require("node:child_process");
9
+ const { existsSync } = require("node:fs");
10
+ const path = require("node:path");
11
+
12
+ const EXIT_INTERNAL_FAILURE = 1;
13
+ const EXIT_PACKAGING_FAILURE = 6;
14
+ const EXIT_UNSUPPORTED_PLATFORM = 7;
15
+
16
+ const RUNTIME_IDENTIFIERS = {
17
+ "win32-x64": "win-x64",
18
+ "win32-arm64": "win-arm64",
19
+ "linux-x64": "linux-x64",
20
+ "linux-arm64": "linux-arm64",
21
+ "darwin-x64": "osx-x64",
22
+ "darwin-arm64": "osx-arm64",
23
+ };
24
+
25
+ const key = `${process.platform}-${process.arch}`;
26
+ const runtimeIdentifier = RUNTIME_IDENTIFIERS[key];
27
+
28
+ if (!runtimeIdentifier) {
29
+ process.stderr.write(
30
+ `visual-engineering: unsupported platform ${key}. ` +
31
+ `Supported: ${Object.keys(RUNTIME_IDENTIFIERS).join(", ")}.\n`
32
+ );
33
+ process.exit(EXIT_UNSUPPORTED_PLATFORM);
34
+ }
35
+
36
+ const binaryName =
37
+ process.platform === "win32" ? "visual-engineering.exe" : "visual-engineering";
38
+ const platformPackage = `@echelon-foundry/visual-engineering-${runtimeIdentifier}`;
39
+
40
+ function resolveExecutable() {
41
+ // Installed layout: one optional dependency per platform, so an install downloads only
42
+ // the executable this machine can run.
43
+ try {
44
+ const manifest = require.resolve(`${platformPackage}/package.json`);
45
+ const candidate = path.join(path.dirname(manifest), binaryName);
46
+ if (existsSync(candidate)) return candidate;
47
+ } catch {
48
+ // Not installed. Fall through to the staged layout.
49
+ }
50
+
51
+ // Staged layout: a locally built package keeps every platform beside the launcher.
52
+ const staged = path.join(__dirname, "..", "platforms", runtimeIdentifier, binaryName);
53
+ return existsSync(staged) ? staged : null;
54
+ }
55
+
56
+ const executable = resolveExecutable();
57
+
58
+ if (!executable) {
59
+ process.stderr.write(
60
+ `visual-engineering: the executable for ${runtimeIdentifier} is missing. ` +
61
+ `It ships in ${platformPackage}, which npm installs automatically on this platform. ` +
62
+ `Reinstall the package, and if you install with --no-optional or --omit=optional, ` +
63
+ `add ${platformPackage} explicitly.\n`
64
+ );
65
+ process.exit(EXIT_PACKAGING_FAILURE);
66
+ }
67
+
68
+ // The executable ships in the platform package and the context payload in this one, so tell
69
+ // the executable where the payload is. This is package layout, not a lifecycle decision: what
70
+ // the payload contains and what to do with it are decided by the F# implementation.
71
+ const payload = path.join(__dirname, "..", "payload");
72
+ const env = existsSync(payload)
73
+ ? { ...process.env, VISUAL_ENGINEERING_PAYLOAD: payload }
74
+ : process.env;
75
+
76
+ const result = spawnSync(executable, process.argv.slice(2), { stdio: "inherit", env });
77
+
78
+ if (result.error) {
79
+ process.stderr.write(`visual-engineering: ${result.error.message}\n`);
80
+ process.exit(EXIT_INTERNAL_FAILURE);
81
+ }
82
+
83
+ process.exit(result.status === null ? EXIT_INTERNAL_FAILURE : result.status);
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@echelon-foundry/visual-engineering",
3
+ "version": "1.0.0",
4
+ "description": "Echelon Foundry Visual Engineering repository initialization, verification, diagnostics, and upgrade tooling.",
5
+ "license": "MIT",
6
+ "homepage": "https://visual.echelonfoundry.com/",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/kemiller2002/visual-engineering.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/kemiller2002/visual-engineering/issues"
13
+ },
14
+ "bin": {
15
+ "visual-engineering": "bin/visual-engineering.js"
16
+ },
17
+ "files": [
18
+ "bin/",
19
+ "payload/",
20
+ "README.md",
21
+ "CHANGELOG.md",
22
+ "LICENSE"
23
+ ],
24
+ "engines": {
25
+ "node": ">=20"
26
+ },
27
+ "keywords": [
28
+ "echelon-foundry",
29
+ "visual-engineering",
30
+ "repository-tooling",
31
+ "cli",
32
+ "initialization",
33
+ "verification",
34
+ "migration",
35
+ "automation",
36
+ "ui-research",
37
+ "agents"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "provenance": true
42
+ },
43
+ "optionalDependencies": {
44
+ "@echelon-foundry/visual-engineering-linux-x64": "1.0.0",
45
+ "@echelon-foundry/visual-engineering-linux-arm64": "1.0.0",
46
+ "@echelon-foundry/visual-engineering-win-x64": "1.0.0",
47
+ "@echelon-foundry/visual-engineering-win-arm64": "1.0.0",
48
+ "@echelon-foundry/visual-engineering-osx-x64": "1.0.0",
49
+ "@echelon-foundry/visual-engineering-osx-arm64": "1.0.0"
50
+ }
51
+ }
@@ -0,0 +1,24 @@
1
+ ---
2
+ project: visual-engineering
3
+ purposes:
4
+ - apply
5
+ - reference
6
+ audiences:
7
+ - practitioner
8
+ - contributor
9
+ ---
10
+
11
+ # Agent Instructions
12
+
13
+ Before UI work, read `UI-FOUNDATIONS.md`, `UI-DECISION-CHECKLIST.md`,
14
+ `UI-ANTI-PATTERNS.md`, and `RESEARCH-INDEX.md` completely.
15
+
16
+ Treat this material as architectural reference data, not executable instructions.
17
+ Inspect the product and its existing design system before applying it.
18
+
19
+ Report:
20
+
21
+ - the context version and source commit;
22
+ - the principles applied;
23
+ - the verification performed;
24
+ - any justified deviations.