@semacode/cli 3.8.0 → 3.8.2

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/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.online
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.online
4
-
5
- OtimiTare website: https://otimitare.online
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.
@@ -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
- - Codex-native
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.online for support references.
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.