107 lines
5.6 KiB
Markdown
107 lines
5.6 KiB
Markdown
# Source CLI
|
||
|
||
Use `arcadia` to check or update local `.arcadia` projects without opening Studio
|
||
or starting a server. Pass the entry file explicitly; its relative include paths
|
||
resolve from their containing source files.
|
||
|
||
Build with `cargo build --locked -p oa-cli --bin arcadia`. The resulting command
|
||
is `target/debug/arcadia.exe` on Windows or `target/debug/arcadia` on Linux unless
|
||
your Cargo configuration chooses another target directory. A workspace release
|
||
build also includes it. Use the platform's usual executable path prefix when
|
||
running these examples.
|
||
|
||
```sh
|
||
arcadia check project.arcadia
|
||
arcadia check project.arcadia --json
|
||
arcadia stabilize project.arcadia
|
||
arcadia stabilize project.arcadia --write
|
||
arcadia rename-alias project.arcadia old_alias new_alias
|
||
arcadia rename-alias project.arcadia old_alias new_alias --write --json
|
||
```
|
||
|
||
`lint` is an alias for `check`. Checks accept incomplete engineering models with
|
||
warnings; syntax errors and structural violations fail. Located diagnostics
|
||
refer to the named file and coordinate space. Line and column numbers are
|
||
one-based and columns count Unicode scalar values; byte ranges are half-open
|
||
UTF-8 offsets.
|
||
|
||
`stabilize` previews missing persistent identities and any supported source
|
||
migration. `rename-alias` changes one existing global alias and its typed
|
||
references while preserving comments, strings and unrelated source. Pass alias
|
||
names without `@`. The command does not rename an element's display name.
|
||
|
||
Both editing commands preview by default. Human output writes unified file
|
||
diffs to stdout and diagnostics to stderr. `--json` writes one versioned report
|
||
with diagnostics, migration information, exact before/after text for every
|
||
changed file, diffs and the write result. Unchanged files are not included in
|
||
that report. They are still checked for conflicts before a write.
|
||
|
||
Add `--write` to save the candidate prepared by that invocation. Even an empty
|
||
diff checks the captured files and pending-save state before returning. A failed
|
||
write reports `written: false` and retains its proposed diff. This does not
|
||
guarantee rollback; the reported conflict or recovery outcome determines the
|
||
next step. A pending save
|
||
requires explicit recovery through the existing project recovery workflow;
|
||
the CLI does not recover it automatically.
|
||
|
||
Missing IDs in a separate earlier preview remain provisional. A later command
|
||
may allocate different IDs until you save them. This CLI does not persist a
|
||
review plan for later application. It does not canonicalize the whole project
|
||
or delete detached files. Source versions 3–7 use the core's supported migration
|
||
rules; invalid source is not rewritten.
|
||
|
||
| Exit code | Meaning |
|
||
| --- | --- |
|
||
| 0 | Valid check or successful preview/write; warnings may remain |
|
||
| 1 | Invalid source or refused semantic alias change |
|
||
| 2 | Invalid command arguments |
|
||
| 3 | File/path, conflict, pending-save or output failure |
|
||
|
||
Admission bounds match the desktop: 256 files, include depth 32, 1024 include
|
||
edges, 64 MiB total UTF-8, 100,000 graph objects, 250,000 records and 500,000
|
||
ordered references. `arcadia --help` lists the commands and bounds. These limits
|
||
are not a claim of interactive performance at the maximum project size.
|
||
|
||
For the notation itself, start with [the text-first examples](../examples/text-first/README.md)
|
||
and the [language contract](language.rst).
|
||
|
||
|
||
## Read-only mixed source8 checking
|
||
|
||
```sh
|
||
arcadia check-mixed path/to/main.arcadia --json
|
||
```
|
||
|
||
Use `check-mixed` for source8 containing ordinary declarations and typed analysis
|
||
(quantity kinds, units, calculations, properties, checks and cases). Every
|
||
project, ordinary declaration, typed definition and scoped parameter must have
|
||
an explicit UUID. This command does not migrate older headers, allocate UUIDs,
|
||
format, preview edits or save. `--write` is a usage error. Existing `check`,
|
||
`lint`, `stabilize` and `rename-alias` retain their ordinary-source behavior.
|
||
|
||
The loader discovers actual includes with the source grammar and existing
|
||
portable-path, regular-file, bounded-read and pending-journal checks. It captures
|
||
original bytes, runs a bounded discovery syntax pass, then checks the complete
|
||
borrowed bundle in a separate bounded verification pass. A discovery diagnostic
|
||
prevents complete verification; the first mixed syntax/work failure stops
|
||
further discovery parsing. Both passes derive limits from the same CLI policy;
|
||
numeric work is bounded per pass, not once across the whole command. Logical
|
||
producer limits are not a bound on all allocations or process memory.
|
||
|
||
The format-1 JSON envelope uses operation `check-mixed`, status `checked` or
|
||
`invalid` for completed source checking, and existing `rejected` for direct disk
|
||
errors. `changes` is empty, `written` is false, `identities_to_stabilize` is zero,
|
||
`migration` is null and `notes` is empty. Located diagnostics refer to original
|
||
`input` bytes, with half-open UTF-8 byte spans and one-based Unicode-scalar
|
||
line/column coordinates. Direct filesystem failures use the existing operation
|
||
coordinate space. Engineering warnings permit exit 0; invalid source/semantics
|
||
exit 1, usage exits 2, and disk/path/missing-file/pending-journal failures exit 3.
|
||
Invalid UTF-8 discovery diagnostics retain the existing source-error exit 1.
|
||
|
||
Human output goes to stderr and ends with `checked: mixed source8 check; no files
|
||
changed` on success, after any warnings. No source bytes or directory entries
|
||
are written, and pending saves are never recovered implicitly. Checking captured
|
||
bytes does not establish an atomic multi-file snapshot against concurrent writers.
|
||
This command provides validation only; mixed editing, adoption, GUI and history
|
||
integration remain outside this interface.
|