@semacode/cli 3.8.1 → 3.8.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/LICENSE +39 -39
- package/README.md +119 -119
- package/dist/driftEscopo.js +35 -0
- package/dist/iaPrompts.js +11 -11
- package/dist/index.part02.js +21 -21
- package/dist/index.part07.js +24 -24
- package/dist/initCommand.js +1 -1
- package/dist/initTemplatesBase.js +84 -84
- package/docs/README.md +15 -15
- package/docs/ai-onboarding.md +81 -81
- package/docs/cli.md +197 -197
- package/docs/deploy.md +54 -54
- package/docs/documentation.md +11 -11
- package/docs/drift-cache.md +108 -108
- package/docs/getting-started.md +82 -82
- package/docs/repositories.md +60 -60
- package/docs/rollback.md +38 -38
- package/docs/security.md +54 -54
- package/docs/sistemas-interativos.md +27 -27
- package/docs/support.md +8 -8
- package/docs/testing.md +123 -123
- package/docs/vocabulary.md +29 -29
- package/exemplos/express_crud.sema +139 -139
- package/exemplos/fastify_crud.sema +146 -146
- package/exemplos/koa_crud.sema +95 -95
- package/package.json +4 -4
- package/scripts/postinstall.mjs +148 -148
- package/skills/sema/SKILL.md +199 -199
package/docs/security.md
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
# Security
|
|
2
|
-
|
|
3
|
-
The public Sema repository must not contain private or sensitive operational
|
|
4
|
-
material.
|
|
5
|
-
|
|
6
|
-
Local Sema execution does not need a credential, login, activation key, license
|
|
7
|
-
token, billing token, or control-panel session. Do not introduce one as a
|
|
8
|
-
condition for reading or governing a local workspace.
|
|
9
|
-
|
|
10
|
-
The official bootstrap skill contains instructions only. The global npm
|
|
11
|
-
postinstall may atomically update the managed launcher under `~/.sema/bin`, the
|
|
12
|
-
canonical copy under `~/.agents/skills/sema`, and a Claude mirror under
|
|
13
|
-
`~/.claude/skills/sema` when Claude is already detected. It must not scan the
|
|
14
|
-
home recursively, overwrite an unowned destination, follow symlinks or
|
|
15
|
-
junctions, write into a plugin cache, bundle an MCP server, add a credential
|
|
16
|
-
flow, or duplicate the repository governance that belongs in `AGENTS.md`.
|
|
17
|
-
|
|
18
|
-
Status output exposes symbolic paths such as `$HOME/.sema/bin/sema`,
|
|
19
|
-
`$HOME/.sema/bin/sema.ps1`, `$HOME/.sema/bin/sema.cmd`, and
|
|
20
|
-
`$HOME/.sema/bin/sema-managed.ps1`, never the real home, Node.js executable, or
|
|
21
|
-
package path. On Windows, PowerShell resolves `sema.ps1` from `PATH`, `cmd.exe`
|
|
22
|
-
resolves `sema.cmd`, and the fallback runs `sema-managed.ps1` through
|
|
23
|
-
`%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe`. A managed receipt
|
|
24
|
-
detects isolated corruption of the launchers and companion; it is integrity
|
|
25
|
-
recovery, not authentication against a hostile process running as the same
|
|
26
|
-
user. Private absolute paths are not published in JSON or logs.
|
|
27
|
-
|
|
28
|
-
The public-package factory rejects pre-existing symlinks, junctions, and
|
|
29
|
-
reparse points in source, stage, and output chains and revalidates filesystem
|
|
30
|
-
identity around each path-based operation. This is fail-closed hardening, not a
|
|
31
|
-
native sandbox: Node.js does not expose cross-platform `openat`/`linkat`-style
|
|
32
|
-
operations anchored to directory handles, so a hostile process running as the
|
|
33
|
-
same operating-system user can still race a parent-path swap. Do not present
|
|
34
|
-
the private package stage as a security boundary against that attacker.
|
|
35
|
-
|
|
36
|
-
Do not publish:
|
|
37
|
-
|
|
38
|
-
- real credentials or secret material;
|
|
39
|
-
- private data or internal operational artifacts.
|
|
40
|
-
|
|
41
|
-
Placeholder examples are allowed:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
EXAMPLE_KEY=replace-me
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
If a real credential is exposed in code, docs, logs, screenshots, packages, or
|
|
48
|
-
Git history:
|
|
49
|
-
|
|
50
|
-
1. Rotate it immediately.
|
|
51
|
-
2. Remove it from the affected artifact.
|
|
52
|
-
3. Rebuild and rescan before publishing.
|
|
53
|
-
|
|
54
|
-
Official support: suporte@otimitare.
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
The public Sema repository must not contain private or sensitive operational
|
|
4
|
+
material.
|
|
5
|
+
|
|
6
|
+
Local Sema execution does not need a credential, login, activation key, license
|
|
7
|
+
token, billing token, or control-panel session. Do not introduce one as a
|
|
8
|
+
condition for reading or governing a local workspace.
|
|
9
|
+
|
|
10
|
+
The official bootstrap skill contains instructions only. The global npm
|
|
11
|
+
postinstall may atomically update the managed launcher under `~/.sema/bin`, the
|
|
12
|
+
canonical copy under `~/.agents/skills/sema`, and a Claude mirror under
|
|
13
|
+
`~/.claude/skills/sema` when Claude is already detected. It must not scan the
|
|
14
|
+
home recursively, overwrite an unowned destination, follow symlinks or
|
|
15
|
+
junctions, write into a plugin cache, bundle an MCP server, add a credential
|
|
16
|
+
flow, or duplicate the repository governance that belongs in `AGENTS.md`.
|
|
17
|
+
|
|
18
|
+
Status output exposes symbolic paths such as `$HOME/.sema/bin/sema`,
|
|
19
|
+
`$HOME/.sema/bin/sema.ps1`, `$HOME/.sema/bin/sema.cmd`, and
|
|
20
|
+
`$HOME/.sema/bin/sema-managed.ps1`, never the real home, Node.js executable, or
|
|
21
|
+
package path. On Windows, PowerShell resolves `sema.ps1` from `PATH`, `cmd.exe`
|
|
22
|
+
resolves `sema.cmd`, and the fallback runs `sema-managed.ps1` through
|
|
23
|
+
`%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe`. A managed receipt
|
|
24
|
+
detects isolated corruption of the launchers and companion; it is integrity
|
|
25
|
+
recovery, not authentication against a hostile process running as the same
|
|
26
|
+
user. Private absolute paths are not published in JSON or logs.
|
|
27
|
+
|
|
28
|
+
The public-package factory rejects pre-existing symlinks, junctions, and
|
|
29
|
+
reparse points in source, stage, and output chains and revalidates filesystem
|
|
30
|
+
identity around each path-based operation. This is fail-closed hardening, not a
|
|
31
|
+
native sandbox: Node.js does not expose cross-platform `openat`/`linkat`-style
|
|
32
|
+
operations anchored to directory handles, so a hostile process running as the
|
|
33
|
+
same operating-system user can still race a parent-path swap. Do not present
|
|
34
|
+
the private package stage as a security boundary against that attacker.
|
|
35
|
+
|
|
36
|
+
Do not publish:
|
|
37
|
+
|
|
38
|
+
- real credentials or secret material;
|
|
39
|
+
- private data or internal operational artifacts.
|
|
40
|
+
|
|
41
|
+
Placeholder examples are allowed:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
EXAMPLE_KEY=replace-me
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If a real credential is exposed in code, docs, logs, screenshots, packages, or
|
|
48
|
+
Git history:
|
|
49
|
+
|
|
50
|
+
1. Rotate it immediately.
|
|
51
|
+
2. Remove it from the affected artifact.
|
|
52
|
+
3. Rebuild and rescan before publishing.
|
|
53
|
+
|
|
54
|
+
Official support: suporte@otimitare.com
|
|
@@ -330,33 +330,33 @@ only that local structural coverage is complete; it deliberately keeps
|
|
|
330
330
|
editor was inspected, a plug-in existed, a worker accepted a job, a package
|
|
331
331
|
launched, or an external observer attested the result.
|
|
332
332
|
|
|
333
|
-
## Semantic responsibility split
|
|
334
|
-
|
|
335
|
-
The operational surface is divided by responsibility while preserving
|
|
336
|
-
`operations.ts` as the stable explicit export facade:
|
|
337
|
-
|
|
338
|
-
- `operationPrimitives.ts` contains shared validation, canonicalization, digest,
|
|
339
|
-
and evidence primitives;
|
|
340
|
-
- `engineObservation.ts` owns engine snapshots, semantic diffs, asset
|
|
341
|
-
provenance, and editor-state observation;
|
|
342
|
-
- `jobOrchestration.ts` owns queues, locks, budgets, leases, checkpoints, and
|
|
343
|
-
recovery planning;
|
|
344
|
-
- `acceptanceEvidence.ts` owns acceptance locks, invalidation, and multimodal
|
|
345
|
-
claim evidence.
|
|
346
|
-
|
|
347
|
-
The contracts follow the same boundaries through
|
|
348
|
-
`sistemas_interativos_operacao.sema`,
|
|
349
|
-
`sistemas_interativos_observacao_engine.sema`,
|
|
350
|
-
`sistemas_interativos_orquestracao_jobs.sema`, and
|
|
351
|
-
`sistemas_interativos_acceptance_evidencias.sema`. The installed-package smoke
|
|
352
|
-
also keeps one stable orchestrator and one isolated installation, delegating
|
|
353
|
-
public-boundary security, Codex bootstrap, content-pipeline compatibility,
|
|
354
|
-
interactive systems, and generated toolchains to named helpers under
|
|
355
|
-
`scripts/cli-publico/`.
|
|
356
|
-
|
|
357
|
-
This is a responsibility split, not a numbered-file workaround. Existing
|
|
358
|
-
exports, schema versions, fixtures, digests, and fail-closed behavior remain
|
|
359
|
-
backward compatible across the facades.
|
|
333
|
+
## Semantic responsibility split
|
|
334
|
+
|
|
335
|
+
The operational surface is divided by responsibility while preserving
|
|
336
|
+
`operations.ts` as the stable explicit export facade:
|
|
337
|
+
|
|
338
|
+
- `operationPrimitives.ts` contains shared validation, canonicalization, digest,
|
|
339
|
+
and evidence primitives;
|
|
340
|
+
- `engineObservation.ts` owns engine snapshots, semantic diffs, asset
|
|
341
|
+
provenance, and editor-state observation;
|
|
342
|
+
- `jobOrchestration.ts` owns queues, locks, budgets, leases, checkpoints, and
|
|
343
|
+
recovery planning;
|
|
344
|
+
- `acceptanceEvidence.ts` owns acceptance locks, invalidation, and multimodal
|
|
345
|
+
claim evidence.
|
|
346
|
+
|
|
347
|
+
The contracts follow the same boundaries through
|
|
348
|
+
`sistemas_interativos_operacao.sema`,
|
|
349
|
+
`sistemas_interativos_observacao_engine.sema`,
|
|
350
|
+
`sistemas_interativos_orquestracao_jobs.sema`, and
|
|
351
|
+
`sistemas_interativos_acceptance_evidencias.sema`. The installed-package smoke
|
|
352
|
+
also keeps one stable orchestrator and one isolated installation, delegating
|
|
353
|
+
public-boundary security, Codex bootstrap, content-pipeline compatibility,
|
|
354
|
+
interactive systems, and generated toolchains to named helpers under
|
|
355
|
+
`scripts/cli-publico/`.
|
|
356
|
+
|
|
357
|
+
This is a responsibility split, not a numbered-file workaround. Existing
|
|
358
|
+
exports, schema versions, fixtures, digests, and fail-closed behavior remain
|
|
359
|
+
backward compatible across the facades.
|
|
360
360
|
|
|
361
361
|
## Fidelity rules
|
|
362
362
|
|
package/docs/support.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Support
|
|
2
|
-
|
|
3
|
-
Official Sema support email: suporte@otimitare.
|
|
4
|
-
|
|
5
|
-
OtimiTare website: https://otimitare.
|
|
6
|
-
|
|
7
|
-
Do not publish private or sensitive support routing material in the public Sema
|
|
8
|
-
repository.
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
Official Sema support email: suporte@otimitare.com
|
|
4
|
+
|
|
5
|
+
OtimiTare website: https://otimitare.com
|
|
6
|
+
|
|
7
|
+
Do not publish private or sensitive support routing material in the public Sema
|
|
8
|
+
repository.
|
package/docs/testing.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Public Sema tests should run locally.
|
|
4
4
|
|
|
5
|
-
Recommended checks:
|
|
5
|
+
Recommended checks:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm run build
|
|
@@ -11,31 +11,31 @@ npm run repo:verificar-publico
|
|
|
11
11
|
npm run plugin:testar-codex
|
|
12
12
|
npm run cli:empacotar-publica
|
|
13
13
|
npm run cli:testar-pacote-publico
|
|
14
|
-
node pacotes/cli/dist/bin.js --help
|
|
15
|
-
node pacotes/cli/dist/bin.js --version
|
|
16
|
-
node pacotes/cli/dist/bin.js resumo exemplos/calculadora.sema --micro --json
|
|
17
|
-
node pacotes/cli/dist/bin.js validar exemplos/calculadora.sema --json
|
|
18
|
-
node pacotes/cli/dist/bin.js testar exemplos/calculadora.sema --alvo dotnet --saida .tmp/testing-dotnet
|
|
19
|
-
node pacotes/cli/dist/bin.js testar exemplos/calculadora.sema --alvo cpp --saida .tmp/testing-cpp
|
|
14
|
+
node pacotes/cli/dist/bin.js --help
|
|
15
|
+
node pacotes/cli/dist/bin.js --version
|
|
16
|
+
node pacotes/cli/dist/bin.js resumo exemplos/calculadora.sema --micro --json
|
|
17
|
+
node pacotes/cli/dist/bin.js validar exemplos/calculadora.sema --json
|
|
18
|
+
node pacotes/cli/dist/bin.js testar exemplos/calculadora.sema --alvo dotnet --saida .tmp/testing-dotnet
|
|
19
|
+
node pacotes/cli/dist/bin.js testar exemplos/calculadora.sema --alvo cpp --saida .tmp/testing-cpp
|
|
20
20
|
npm run release:preparar-publica
|
|
21
|
-
npm run release:verificar-drift
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
`npm run cli:empacotar-publica` is the only supported package factory. It
|
|
25
|
-
builds a private, per-run stage outside `pacotes/cli`, invokes npm there with
|
|
26
|
-
lifecycle scripts disabled, validates the complete tarball, and publishes the
|
|
27
|
-
final `.tgz` without replacing a different concurrent winner. Running `npm
|
|
28
|
-
pack` directly in the source workspace must fail closed and leave the source
|
|
29
|
-
tree byte-for-byte unchanged.
|
|
30
|
-
|
|
31
|
-
Packaging regressions must prove rejection of pre-existing source or output
|
|
32
|
-
junctions, zero external writes in those cases, cross-volume publication,
|
|
33
|
-
cleanup after injected faults, concurrent no-replace publication, and a full
|
|
34
|
-
stage sweep for source maps, credentials, environment files, and billing
|
|
35
|
-
artifacts. Post-operation identity checks detect ordinary path swaps, but tests
|
|
36
|
-
must not claim containment against a hostile same-user process racing path
|
|
37
|
-
operations; that stronger guarantee requires native directory-handle-relative
|
|
38
|
-
filesystem primitives that Node.js does not provide cross-platform.
|
|
21
|
+
npm run release:verificar-drift
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`npm run cli:empacotar-publica` is the only supported package factory. It
|
|
25
|
+
builds a private, per-run stage outside `pacotes/cli`, invokes npm there with
|
|
26
|
+
lifecycle scripts disabled, validates the complete tarball, and publishes the
|
|
27
|
+
final `.tgz` without replacing a different concurrent winner. Running `npm
|
|
28
|
+
pack` directly in the source workspace must fail closed and leave the source
|
|
29
|
+
tree byte-for-byte unchanged.
|
|
30
|
+
|
|
31
|
+
Packaging regressions must prove rejection of pre-existing source or output
|
|
32
|
+
junctions, zero external writes in those cases, cross-volume publication,
|
|
33
|
+
cleanup after injected faults, concurrent no-replace publication, and a full
|
|
34
|
+
stage sweep for source maps, credentials, environment files, and billing
|
|
35
|
+
artifacts. Post-operation identity checks detect ordinary path swaps, but tests
|
|
36
|
+
must not claim containment against a hostile same-user process racing path
|
|
37
|
+
operations; that stronger guarantee requires native directory-handle-relative
|
|
38
|
+
filesystem primitives that Node.js does not provide cross-platform.
|
|
39
39
|
|
|
40
40
|
Do not require private or sensitive operational material for public test
|
|
41
41
|
evidence. The public-package smoke must also reject the removed authorization
|
|
@@ -47,104 +47,104 @@ repeat that installation from the remote `gerlanss/Sema` marketplace and prove
|
|
|
47
47
|
that GitHub HEAD, the installed skill, and the manifest-declared npm version
|
|
48
48
|
all describe the same release.
|
|
49
49
|
|
|
50
|
-
The local public-package smoke installs the generated tarball in an isolated
|
|
51
|
-
sandbox. It must import the root API without executing the CLI, materialize
|
|
52
|
-
nested interactive examples, and execute discovery, interactive schema,
|
|
53
|
-
definition validation, planning, and adapter-protocol validation through the
|
|
54
|
-
installed binary. Its global-install phase uses an isolated home, prefix, npm
|
|
55
|
-
cache, and user cache; it verifies the absolute launcher with Node.js/npm absent
|
|
56
|
-
from `PATH`, exact skill digests, read-only status, idempotent repair, and zero
|
|
57
|
-
changes to the real home or workspace. On Windows it must resolve `sema.ps1`
|
|
58
|
-
from a restricted `PATH`, invoke `sema-managed.ps1` with the absolute system
|
|
59
|
-
`powershell.exe`, and exercise `sema.cmd` with conventional `cmd.exe` arguments.
|
|
60
|
-
Byte-exact arbitrary argv is proved through the PowerShell entrypoints. Passing this smoke proves
|
|
61
|
-
the local tarball only; it does not mean that npm or a GitHub release was
|
|
62
|
-
published.
|
|
63
|
-
|
|
64
|
-
The same installed-package smoke must execute root help plus `iniciar --help`,
|
|
65
|
-
`dev --help`, `formatar --help`, `sync-codex --help`, `skill sync --help`, short
|
|
66
|
-
`-h`, and help after unknown arguments. Each text and `--json` invocation runs
|
|
67
|
-
from an empty isolated workspace with an isolated HOME, user cache, plugin
|
|
68
|
-
cache, and npm cache. A recursive content fingerprint before and after every
|
|
69
|
-
invocation must remain identical, and every help path must finish within the
|
|
70
|
-
smoke timeout with exit code `0` and empty stderr.
|
|
71
|
-
|
|
72
|
-
The purity preload also fails on reads under the isolated workspace, HOME, or
|
|
73
|
-
cache roots, subprocess creation, and network primitives. Module reads from the
|
|
74
|
-
installed package itself remain allowed. The smoke invokes the real installed
|
|
75
|
-
launcher with PATH emptied, so a passing direct `node dist/bin.js` probe alone
|
|
76
|
-
is not accepted as launcher evidence.
|
|
77
|
-
|
|
78
|
-
JSON help must be one parseable `sema.cli.control/v1` document containing
|
|
79
|
-
exactly `schemaVersion`, `ok`, `kind`, `code`, `message`, and `exitCode`. The
|
|
80
|
-
smoke must also prove a non-zero `UNKNOWN_COMMAND` control response whose
|
|
81
|
-
process status equals `exitCode`, with no stack, absolute path, raw argv, or
|
|
82
|
-
second JSON document. Every syntactically valid command using `--json` must be
|
|
83
|
-
one parseable `sema.cli.result/v1` document containing exactly
|
|
84
|
-
`schemaVersion`, `ok`, `kind`, `command`, `code`, `message`, `exitCode`, and
|
|
85
|
-
`payload`. Smoke assertions must unwrap `payload` before checking
|
|
86
|
-
command-specific fields, and recorded fixtures must contain that payload rather
|
|
87
|
-
than either public CLI envelope. Coverage must include object, array, scalar,
|
|
88
|
-
and `null` payloads, coherent `SUCCESS` and `DOMAIN_ERROR` results, process
|
|
89
|
-
status equality, empty stderr, no `data` alias, and rejection of missing,
|
|
90
|
-
extra, nested, or mismatched envelope fields. `--version` remains a plain exact
|
|
91
|
-
SemVer text check.
|
|
92
|
-
|
|
93
|
-
Focused distribution tests live in
|
|
94
|
-
`testes/unidade/distribuicao-launcher-global.test.ts`,
|
|
95
|
-
`testes/unidade/distribuicao-skill-global.test.ts`, and
|
|
96
|
-
`testes/unidade/distribuicao-global.test.ts`. They must cover spaces, Unicode,
|
|
97
|
-
argument forwarding, stale targets, ownership conflicts, symlink/junction
|
|
98
|
-
escapes, atomic replacement, idempotent upgrades, the PowerShell fallback with
|
|
99
|
-
an absolute system executable, a detected Claude mirror, and a local lifecycle
|
|
100
|
-
no-op. No test may write to the real user home or a plugin cache.
|
|
101
|
-
|
|
102
|
-
The public-package smoke has one orchestrator and named helpers under
|
|
103
|
-
`scripts/cli-publico/`. All helpers share the same temporary sandbox and the
|
|
104
|
-
same installed tarball; splitting the checks must never multiply installations
|
|
105
|
-
or weaken the single `try/finally` cleanup boundary.
|
|
106
|
-
|
|
107
|
-
Focused drift regressions live in
|
|
108
|
-
`testes/unidade/drift-escopo-dependencias.test.ts`,
|
|
109
|
-
`testes/unidade/drift-escopo-referencias.test.ts`,
|
|
110
|
-
`testes/unidade/drift-catalogo.test.ts`,
|
|
111
|
-
`testes/unidade/drift-leitura-compartilhada.test.ts`, and
|
|
112
|
-
`testes/integracao/drift-escopo-io.test.ts`, plus the external-path attack
|
|
113
|
-
regressions in `testes/integracao/drift-caminhos-externos.test.ts`. They must prove planning before
|
|
114
|
-
cataloging, path confinement, dependency closure, one physical read and one AST
|
|
115
|
-
per canonical file, no homonymous last-write-wins resolution, and no
|
|
116
|
-
project-wide walk for `arquivo` or `modulo` scope. Project-loading regressions
|
|
117
|
-
also prove deferred code discovery and rejection of external configured roots
|
|
118
|
-
or contract origins before enumeration. In project scope, physical file
|
|
119
|
-
bindings outside code roots must enter the safe catalog individually, including
|
|
120
|
-
non-indexable assets, without causing a walk of their parent directories.
|
|
121
|
-
Drift, impact, and semantic rename must not expose an external path or read its
|
|
122
|
-
contents.
|
|
123
|
-
Persistent-cache regressions live in
|
|
124
|
-
`testes/unidade/drift-cache-modes.test.ts`,
|
|
125
|
-
`testes/unidade/drift-cache-store.test.ts`,
|
|
126
|
-
`testes/integracao/drift-cache-persistente.test.ts`, and
|
|
127
|
-
`testes/integracao/drift-cli-modes.test.ts`. They must prove all three modes,
|
|
128
|
-
query defaults, nullable non-evidence, zero cache I/O for `none`, storage outside
|
|
129
|
-
the workspace, opaque paths, strong-content invalidation even with restored
|
|
130
|
-
metadata, corruption recovery, immutable concurrent publication, and semantic
|
|
131
|
-
equivalence between fresh and warm results. Shape-valid semantic tampering with
|
|
132
|
-
only the envelope `payloadDigest` recalculated must fail the cross-index
|
|
133
|
-
invariants, become a corrupt miss, recalculate, and match the fresh result. The
|
|
134
|
-
payload must derive symbol, route, resource, and known-file aggregates from its
|
|
135
|
-
canonical per-extractor indices instead of trusting redundant aggregate lists.
|
|
136
|
-
A warm hit may skip AST/extractor work, but it never reuses the final score,
|
|
137
|
-
links, diagnostics, or success decision. Junctions, symlinks, hardlinks, path
|
|
138
|
-
traversal, drive-relative paths,
|
|
139
|
-
intermediate-directory swaps, and cache unavailability must fail closed or
|
|
140
|
-
degrade to an in-memory calculation without mutating the workspace.
|
|
141
|
-
|
|
142
|
-
Cache digests are corruption checks, not authentication against a hostile
|
|
143
|
-
process running as the same operating-system user. Tests must not present a
|
|
144
|
-
warm cache hit as a protected trust boundary; final closure evidence uses
|
|
145
|
-
`--cache fresh`.
|
|
146
|
-
|
|
147
|
-
Native generator evidence is mandatory when changing C#/.NET or C++ support.
|
|
50
|
+
The local public-package smoke installs the generated tarball in an isolated
|
|
51
|
+
sandbox. It must import the root API without executing the CLI, materialize
|
|
52
|
+
nested interactive examples, and execute discovery, interactive schema,
|
|
53
|
+
definition validation, planning, and adapter-protocol validation through the
|
|
54
|
+
installed binary. Its global-install phase uses an isolated home, prefix, npm
|
|
55
|
+
cache, and user cache; it verifies the absolute launcher with Node.js/npm absent
|
|
56
|
+
from `PATH`, exact skill digests, read-only status, idempotent repair, and zero
|
|
57
|
+
changes to the real home or workspace. On Windows it must resolve `sema.ps1`
|
|
58
|
+
from a restricted `PATH`, invoke `sema-managed.ps1` with the absolute system
|
|
59
|
+
`powershell.exe`, and exercise `sema.cmd` with conventional `cmd.exe` arguments.
|
|
60
|
+
Byte-exact arbitrary argv is proved through the PowerShell entrypoints. Passing this smoke proves
|
|
61
|
+
the local tarball only; it does not mean that npm or a GitHub release was
|
|
62
|
+
published.
|
|
63
|
+
|
|
64
|
+
The same installed-package smoke must execute root help plus `iniciar --help`,
|
|
65
|
+
`dev --help`, `formatar --help`, `sync-codex --help`, `skill sync --help`, short
|
|
66
|
+
`-h`, and help after unknown arguments. Each text and `--json` invocation runs
|
|
67
|
+
from an empty isolated workspace with an isolated HOME, user cache, plugin
|
|
68
|
+
cache, and npm cache. A recursive content fingerprint before and after every
|
|
69
|
+
invocation must remain identical, and every help path must finish within the
|
|
70
|
+
smoke timeout with exit code `0` and empty stderr.
|
|
71
|
+
|
|
72
|
+
The purity preload also fails on reads under the isolated workspace, HOME, or
|
|
73
|
+
cache roots, subprocess creation, and network primitives. Module reads from the
|
|
74
|
+
installed package itself remain allowed. The smoke invokes the real installed
|
|
75
|
+
launcher with PATH emptied, so a passing direct `node dist/bin.js` probe alone
|
|
76
|
+
is not accepted as launcher evidence.
|
|
77
|
+
|
|
78
|
+
JSON help must be one parseable `sema.cli.control/v1` document containing
|
|
79
|
+
exactly `schemaVersion`, `ok`, `kind`, `code`, `message`, and `exitCode`. The
|
|
80
|
+
smoke must also prove a non-zero `UNKNOWN_COMMAND` control response whose
|
|
81
|
+
process status equals `exitCode`, with no stack, absolute path, raw argv, or
|
|
82
|
+
second JSON document. Every syntactically valid command using `--json` must be
|
|
83
|
+
one parseable `sema.cli.result/v1` document containing exactly
|
|
84
|
+
`schemaVersion`, `ok`, `kind`, `command`, `code`, `message`, `exitCode`, and
|
|
85
|
+
`payload`. Smoke assertions must unwrap `payload` before checking
|
|
86
|
+
command-specific fields, and recorded fixtures must contain that payload rather
|
|
87
|
+
than either public CLI envelope. Coverage must include object, array, scalar,
|
|
88
|
+
and `null` payloads, coherent `SUCCESS` and `DOMAIN_ERROR` results, process
|
|
89
|
+
status equality, empty stderr, no `data` alias, and rejection of missing,
|
|
90
|
+
extra, nested, or mismatched envelope fields. `--version` remains a plain exact
|
|
91
|
+
SemVer text check.
|
|
92
|
+
|
|
93
|
+
Focused distribution tests live in
|
|
94
|
+
`testes/unidade/distribuicao-launcher-global.test.ts`,
|
|
95
|
+
`testes/unidade/distribuicao-skill-global.test.ts`, and
|
|
96
|
+
`testes/unidade/distribuicao-global.test.ts`. They must cover spaces, Unicode,
|
|
97
|
+
argument forwarding, stale targets, ownership conflicts, symlink/junction
|
|
98
|
+
escapes, atomic replacement, idempotent upgrades, the PowerShell fallback with
|
|
99
|
+
an absolute system executable, a detected Claude mirror, and a local lifecycle
|
|
100
|
+
no-op. No test may write to the real user home or a plugin cache.
|
|
101
|
+
|
|
102
|
+
The public-package smoke has one orchestrator and named helpers under
|
|
103
|
+
`scripts/cli-publico/`. All helpers share the same temporary sandbox and the
|
|
104
|
+
same installed tarball; splitting the checks must never multiply installations
|
|
105
|
+
or weaken the single `try/finally` cleanup boundary.
|
|
106
|
+
|
|
107
|
+
Focused drift regressions live in
|
|
108
|
+
`testes/unidade/drift-escopo-dependencias.test.ts`,
|
|
109
|
+
`testes/unidade/drift-escopo-referencias.test.ts`,
|
|
110
|
+
`testes/unidade/drift-catalogo.test.ts`,
|
|
111
|
+
`testes/unidade/drift-leitura-compartilhada.test.ts`, and
|
|
112
|
+
`testes/integracao/drift-escopo-io.test.ts`, plus the external-path attack
|
|
113
|
+
regressions in `testes/integracao/drift-caminhos-externos.test.ts`. They must prove planning before
|
|
114
|
+
cataloging, path confinement, dependency closure, one physical read and one AST
|
|
115
|
+
per canonical file, no homonymous last-write-wins resolution, and no
|
|
116
|
+
project-wide walk for `arquivo` or `modulo` scope. Project-loading regressions
|
|
117
|
+
also prove deferred code discovery and rejection of external configured roots
|
|
118
|
+
or contract origins before enumeration. In project scope, physical file
|
|
119
|
+
bindings outside code roots must enter the safe catalog individually, including
|
|
120
|
+
non-indexable assets, without causing a walk of their parent directories.
|
|
121
|
+
Drift, impact, and semantic rename must not expose an external path or read its
|
|
122
|
+
contents.
|
|
123
|
+
Persistent-cache regressions live in
|
|
124
|
+
`testes/unidade/drift-cache-modes.test.ts`,
|
|
125
|
+
`testes/unidade/drift-cache-store.test.ts`,
|
|
126
|
+
`testes/integracao/drift-cache-persistente.test.ts`, and
|
|
127
|
+
`testes/integracao/drift-cli-modes.test.ts`. They must prove all three modes,
|
|
128
|
+
query defaults, nullable non-evidence, zero cache I/O for `none`, storage outside
|
|
129
|
+
the workspace, opaque paths, strong-content invalidation even with restored
|
|
130
|
+
metadata, corruption recovery, immutable concurrent publication, and semantic
|
|
131
|
+
equivalence between fresh and warm results. Shape-valid semantic tampering with
|
|
132
|
+
only the envelope `payloadDigest` recalculated must fail the cross-index
|
|
133
|
+
invariants, become a corrupt miss, recalculate, and match the fresh result. The
|
|
134
|
+
payload must derive symbol, route, resource, and known-file aggregates from its
|
|
135
|
+
canonical per-extractor indices instead of trusting redundant aggregate lists.
|
|
136
|
+
A warm hit may skip AST/extractor work, but it never reuses the final score,
|
|
137
|
+
links, diagnostics, or success decision. Junctions, symlinks, hardlinks, path
|
|
138
|
+
traversal, drive-relative paths,
|
|
139
|
+
intermediate-directory swaps, and cache unavailability must fail closed or
|
|
140
|
+
degrade to an in-memory calculation without mutating the workspace.
|
|
141
|
+
|
|
142
|
+
Cache digests are corruption checks, not authentication against a hostile
|
|
143
|
+
process running as the same operating-system user. Tests must not present a
|
|
144
|
+
warm cache hit as a protected trust boundary; final closure evidence uses
|
|
145
|
+
`--cache fresh`.
|
|
146
|
+
|
|
147
|
+
Native generator evidence is mandatory when changing C#/.NET or C++ support.
|
|
148
148
|
The `dotnet` smoke must compile and execute through the local .NET SDK. The
|
|
149
149
|
`cpp` smoke must compile and execute through GCC, Clang, or MSVC; checking only
|
|
150
150
|
for generated files is not sufficient.
|
package/docs/vocabulary.md
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# Sema Vocabulary
|
|
2
|
-
|
|
3
|
-
Use consistent English prose in public docs while preserving technical
|
|
4
|
-
identifiers.
|
|
5
|
-
|
|
6
|
-
## Canonical Concepts
|
|
7
|
-
|
|
8
|
-
- semantic contract
|
|
9
|
-
- drift
|
|
10
|
-
- impact map
|
|
11
|
-
- governed code
|
|
12
|
-
- traceability
|
|
13
|
-
-
|
|
14
|
-
- local runtime
|
|
15
|
-
- finalization
|
|
16
|
-
- evidence
|
|
17
|
-
- local CLI
|
|
18
|
-
|
|
19
|
-
## Do Not Translate
|
|
20
|
-
|
|
21
|
-
- commands: `sema validar`, `sema drift`, `sema impacto`
|
|
22
|
-
- files: `AGENTS.md`, `SEMA_BOOT.md`, `SEMA_INDEX.json`
|
|
23
|
-
- DSL keywords: `task`, `input`, `output`, `rules`, `effects`, `guarantees`
|
|
24
|
-
- package names: `@semacode/cli`
|
|
25
|
-
- code symbols and environment variable names
|
|
26
|
-
|
|
27
|
-
## Public Support
|
|
28
|
-
|
|
29
|
-
Use suporte@otimitare.
|
|
1
|
+
# Sema Vocabulary
|
|
2
|
+
|
|
3
|
+
Use consistent English prose in public docs while preserving technical
|
|
4
|
+
identifiers.
|
|
5
|
+
|
|
6
|
+
## Canonical Concepts
|
|
7
|
+
|
|
8
|
+
- semantic contract
|
|
9
|
+
- drift
|
|
10
|
+
- impact map
|
|
11
|
+
- governed code
|
|
12
|
+
- traceability
|
|
13
|
+
- agent-native (Claude, Codex, zCode/GLM, Kimi)
|
|
14
|
+
- local runtime
|
|
15
|
+
- finalization
|
|
16
|
+
- evidence
|
|
17
|
+
- local CLI
|
|
18
|
+
|
|
19
|
+
## Do Not Translate
|
|
20
|
+
|
|
21
|
+
- commands: `sema validar`, `sema drift`, `sema impacto`
|
|
22
|
+
- files: `AGENTS.md`, `SEMA_BOOT.md`, `SEMA_INDEX.json`
|
|
23
|
+
- DSL keywords: `task`, `input`, `output`, `rules`, `effects`, `guarantees`
|
|
24
|
+
- package names: `@semacode/cli`
|
|
25
|
+
- code symbols and environment variable names
|
|
26
|
+
|
|
27
|
+
## Public Support
|
|
28
|
+
|
|
29
|
+
Use suporte@otimitare.com for support references.
|