@skillstech/thunderlang 0.1.6 → 0.2.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 +87 -47
- package/LICENSE +201 -21
- package/NOTICE +15 -0
- package/README.md +5 -8
- package/dist/core.cjs +123 -26
- package/dist/index.cjs +128 -31
- package/intent-graph.schema.json +227 -4
- package/package.json +12 -12
- package/src/ai-events.mjs +1 -1
- package/src/cli.mjs +759 -151
- package/src/codegen.mjs +1 -1
- package/src/compile.mjs +3 -3
- package/src/conformance.mjs +35 -0
- package/src/coverage.mjs +56 -0
- package/src/drift.mjs +3 -3
- package/src/emit.mjs +5 -3
- package/src/expr.mjs +11 -7
- package/src/focus.mjs +1 -1
- package/src/guard.mjs +3 -3
- package/src/intellisense.mjs +1 -1
- package/src/intent-graph.mjs +29 -0
- package/src/intent-schema.mjs +4 -4
- package/src/ledger.mjs +1 -1
- package/src/lift.mjs +2 -2
- package/src/lsp.mjs +1 -1
- package/src/mcp.mjs +1 -1
- package/src/mutate.mjs +46 -0
- package/src/parse.mjs +85 -6
- package/src/proof-schema.mjs +2 -2
- package/src/property.mjs +108 -0
- package/src/report.mjs +1 -1
- package/src/sarif.mjs +1 -1
- package/src/scan-queries.mjs +1 -1
- package/src/style.mjs +3 -3
- package/src/target-cs.mjs +98 -0
- package/src/target-java.mjs +87 -0
- package/src/target-py.mjs +90 -0
- package/src/target-ts.mjs +66 -0
- package/src/target-util.mjs +95 -0
- package/src/testing.mjs +1 -1
- package/src/twelve-factor.mjs +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,46 @@
|
|
|
3
3
|
All notable changes to `@skillstech/thunderlang`. Pre-1.0: the language and the
|
|
4
4
|
`intent-graph-v1` schema version independently and may still change.
|
|
5
5
|
|
|
6
|
+
## 0.2.0
|
|
7
|
+
|
|
8
|
+
The cross-language target execution release. Additive; no breaking changes.
|
|
9
|
+
|
|
10
|
+
Version alignment: starting with 0.2.0, ThunderLang and OpenThunder version in lockstep, since most
|
|
11
|
+
OpenThunder changes land in the language first. (0.1.8 and 0.1.9 were never published; the last
|
|
12
|
+
release on npm was 0.1.7.)
|
|
13
|
+
|
|
14
|
+
- **Live target adapters.** `thunder test <file> --target typescript|python|csharp|java` and
|
|
15
|
+
`thunder conform <file> --run <targets>` now compile the generated decision(s) and execute them
|
|
16
|
+
for real, grading the actual outputs instead of fed results. TypeScript/JS runs in-process,
|
|
17
|
+
Python through `python3`, C# through a throwaway `dotnet` console project, and Java through the
|
|
18
|
+
JDK 11+ single-file launcher (`java ThunderTarget.java`).
|
|
19
|
+
- **`--all-targets`.** `thunder test <file> --all-targets` and `thunder conform <file> --all-targets`
|
|
20
|
+
run every target whose toolchain is available in one pass, side by side, and skip any target whose
|
|
21
|
+
runtime is absent (it stays declared in the conformance matrix) rather than failing.
|
|
22
|
+
- **Static-target type inference.** Because C# and Java are statically typed, each decision
|
|
23
|
+
parameter's type is inferred from the test-case values it receives (numeric wins, then boolean,
|
|
24
|
+
else string), and each language gets its own equality translation.
|
|
25
|
+
- Missing toolchains are detected via cached smoke checks and skipped cleanly, so builds never fail
|
|
26
|
+
for a runtime that is not installed.
|
|
27
|
+
|
|
28
|
+
## 0.1.8
|
|
29
|
+
|
|
30
|
+
The testing and verification release. Additive; no breaking changes.
|
|
31
|
+
|
|
32
|
+
- **Rename to ThunderLang.** Package is `@skillstech/thunderlang`; the CLI binary is `thunder`
|
|
33
|
+
(with `intent` kept as a legacy alias). `.thunder` is the canonical source extension; `.tl` and
|
|
34
|
+
`.intent` are accepted. The Intent Graph and Intent-Oriented Programming vocabulary are retained.
|
|
35
|
+
- **`thunder prove`** emits an `intent-proof-v1` artifact with honest per-claim verdicts
|
|
36
|
+
(verified / failed / declared / needs_verification, with `provenBy`). An unverified claim never
|
|
37
|
+
reads as proven.
|
|
38
|
+
- **`thunder test --contracts [--strict]`** derives an obligation from every `guarantee` and
|
|
39
|
+
`never`, resolved against the specific test that verifies it. `--strict` fails CI on any unverified.
|
|
40
|
+
- **Verification classification**: `verify by assertion|static|runtime|evidence|tool|approval|formal`.
|
|
41
|
+
- **Stable IDs**: explicit `id INV-G-001` on guarantees / never-rules (slug fallback).
|
|
42
|
+
- **Proof freshness**: the proof records intent hash, compiler, git commit, dependency-lockfile hash,
|
|
43
|
+
and environment; `thunder verify` marks a proof STALE when the implementation, dependencies, or
|
|
44
|
+
compiler move since it was generated.
|
|
45
|
+
|
|
6
46
|
## 0.1.6
|
|
7
47
|
|
|
8
48
|
The agent-conformance release (skills on intents + 12-factor scoring). Additive; no breaking
|
|
@@ -16,7 +56,7 @@ changes to 0.1.5.
|
|
|
16
56
|
errors/handlers, events, a pure runtime). `twelveFactorReport(ast)` returns a per-factor verdict
|
|
17
57
|
(`satisfied` | `partial` | `absent`) with evidence + a fix and a 0–100 score; `twelveFactorSummary`
|
|
18
58
|
is the compact form. `compileSource` and the proof envelope now carry a `twelveFactor` summary, so
|
|
19
|
-
"12-factor compliant" is a claim the proof asserts. CLI: `
|
|
59
|
+
"12-factor compliant" is a claim the proof asserts. CLI: `thunder twelve-factor <file> [--json]`.
|
|
20
60
|
Findings catalogued as `IL-12F-01..13`. Exported from `/core` and the root. See
|
|
21
61
|
`docs/twelve-factor-agents.md` and `examples/TwelveFactorAgent.intent` (scores 100/100).
|
|
22
62
|
|
|
@@ -109,33 +149,33 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
109
149
|
|
|
110
150
|
- **Executable intent (the Intent Runtime).** `evaluateDecision` (FIRST-hit, full trace),
|
|
111
151
|
`simulateLifecycle` (walk a state machine, reject illegal transitions), and
|
|
112
|
-
`checkDecisionCases`, powered by a safe no-`eval` expression engine. CLI: `
|
|
113
|
-
`
|
|
152
|
+
`checkDecisionCases`, powered by a safe no-`eval` expression engine. CLI: `thunder run`,
|
|
153
|
+
`thunder simulate`.
|
|
114
154
|
- **First-class tests.** `test` blocks (`case` / `scenario`) inside a `.intent` file, run
|
|
115
|
-
with `
|
|
155
|
+
with `thunder test` and `runTests`. The spec proves itself.
|
|
116
156
|
- **Outcome contracts.** `outcome_contract` binds an outcome to a target; `evaluateOutcomes`
|
|
117
|
-
and `
|
|
157
|
+
and `thunder outcomes` judge it met / missed / pending against a delivery `result`.
|
|
118
158
|
- **Full five-profile language.** System (`capability`, `interface`), delivery (`release`,
|
|
119
159
|
`result`, `learning`), and design (`component`, `artifact`) profiles join core, product,
|
|
120
160
|
and experience. Governance (`waiver`) and data privacy (`data`) too.
|
|
121
161
|
- **Interop.** Export to DMN, BPMN, NuSMV, JSON Schema, OpenAPI, W3C Design Tokens, and
|
|
122
|
-
Mermaid , the whole Intent Graph as a paste-anywhere diagram , (`
|
|
123
|
-
import from DMN and BPMN with a fidelity report (`
|
|
124
|
-
graph <-> source round-trip (`graphToSource`, `
|
|
125
|
-
(`migrateGraph`, `validateGraph`, `
|
|
126
|
-
merge (`
|
|
127
|
-
- **Editor support.** A Language Server (`
|
|
162
|
+
Mermaid , the whole Intent Graph as a paste-anywhere diagram , (`thunder export`, `toMermaid`);
|
|
163
|
+
import from DMN and BPMN with a fidelity report (`thunder import`, `importReport`); native
|
|
164
|
+
graph <-> source round-trip (`graphToSource`, `thunder source`); schema migrations
|
|
165
|
+
(`migrateGraph`, `validateGraph`, `thunder migrate` / `validate`); semantic diff + 3-way
|
|
166
|
+
merge (`thunder diff` / `merge`).
|
|
167
|
+
- **Editor support.** A Language Server (`thunder lsp`, `startLspServer`) providing
|
|
128
168
|
diagnostics, completion, and hover over LSP; a TextMate grammar
|
|
129
169
|
(`syntaxes/intent.tmLanguage.json`) for syntax highlighting.
|
|
130
|
-
- **Onboarding + CI.** `
|
|
131
|
-
recurses and gates a whole repo; `
|
|
170
|
+
- **Onboarding + CI.** `thunder init` scaffolds a runnable starter; `thunder check <dir>`
|
|
171
|
+
recurses and gates a whole repo; `thunder check --json` and `thunder explain <CODE>` for
|
|
132
172
|
tooling; a composite GitHub Action.
|
|
133
173
|
- **Style intent.** `style_intent` models brand + visual language as a governed
|
|
134
174
|
Experience-profile extension: design tokens bind to a canonical, lockable address space,
|
|
135
175
|
and `accessibility_target` is always a `proposed` claim (never IL-verified). `analyzeStyle`,
|
|
136
|
-
`styleDiagnostics`, `
|
|
176
|
+
`styleDiagnostics`, `thunder style`, diagnostics `IL-STYLE-001..005`, canonical `StyleIntent`
|
|
137
177
|
node with graph round-trip. Browser-safe via `/core`. Exports to **W3C Design Tokens
|
|
138
|
-
(DTCG)** via `
|
|
178
|
+
(DTCG)** via `thunder export --format tokens` / `toDesignTokens` (`intent-design-tokens-v1`)
|
|
139
179
|
and to a ready-to-use **CSS** custom-property sheet via `--format css` / `toCss`. Experiences
|
|
140
180
|
export to a **Playwright** E2E test scaffold via `--format playwright` / `toPlaywright`.
|
|
141
181
|
- **Security + type diagnostics.** Deterministic checks for the mistakes prompts ship:
|
|
@@ -154,21 +194,21 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
154
194
|
only the target lines so comments, formatting, and untouched blocks stay byte-identical. Closes
|
|
155
195
|
the sync fidelity gap: a PM edits fields and IL keeps the comments. Field removal takes the
|
|
156
196
|
field's indented modifiers with it (no orphans). Unmatched/unsupported edits are reported,
|
|
157
|
-
never applied blindly. Browser-safe. Also a CLI: `
|
|
197
|
+
never applied blindly. Browser-safe. Also a CLI: `thunder edit <file> --edits <json|-> |
|
|
158
198
|
--set-goal | --add-guarantee | ... [--write]`.
|
|
159
|
-
- **Verify a code change against its intent (`intent-verify-diff-v1`).** `
|
|
199
|
+
- **Verify a code change against its intent (`intent-verify-diff-v1`).** `thunder verify-diff
|
|
160
200
|
<intent> --after <code> [--before <code>]` / `verifyDiff()` proves, deterministically and with
|
|
161
201
|
no AI, which of the intent's guarantees/never-rules a change upholds or breaks, and returns a
|
|
162
202
|
gate verdict (PASS/BLOCK, non-zero exit on BLOCK). Blocks on regressions (a claim that held
|
|
163
203
|
before and broke after) and guardrail hits (an added line pushing a never-rule's protected
|
|
164
204
|
secret into a log/response). The keystone of the AI generate-verify loop; honest (catches
|
|
165
205
|
mechanical violations, does not claim to prove correctness).
|
|
166
|
-
- **Intent Atlas + lift-all.** `liftAll(source)` / `
|
|
206
|
+
- **Intent Atlas + lift-all.** `liftAll(source)` / `thunder lift <file> --all` lifts EVERY public
|
|
167
207
|
function in a file into its own inferred mission (not just the first), filtering internal
|
|
168
208
|
helpers (Go: exported-only; Python/Ruby: top-level, non-underscore) , so a whole module reads
|
|
169
209
|
as intent. Powers the Intent Atlas: `scripts/build-atlas.mjs` lifts well-known OSS projects
|
|
170
210
|
(Requests, Express, Flask, gorilla/mux, chi) into a browsable /atlas of ~99 inferred missions.
|
|
171
|
-
- **Prompt -> intent (`intent-draft-v1`).** `draftIntent(brief)` / `
|
|
211
|
+
- **Prompt -> intent (`intent-draft-v1`).** `draftIntent(brief)` / `thunder draft --brief <json|->`
|
|
172
212
|
turns a structured brief into a rigorous, canonically-formatted intent draft PLUS a review
|
|
173
213
|
checklist of what a human must still fill in (unverified guarantee, decision with no default,
|
|
174
214
|
unguarded secret, missing goal). The deterministic half of prompt->intent , an agent produces
|
|
@@ -179,9 +219,9 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
179
219
|
intent declares secret (Secret/Password/Token type, pii/sensitive data, or a secret-looking
|
|
180
220
|
name), deeply , so wrapping a logger enforces "never expose the token"; `assertAllowed(name,
|
|
181
221
|
inputs)` runs a declared decision and THROWS `INTENT_GUARD_DENIED` when the intent denies the
|
|
182
|
-
action , the intent's rules become a hard production gate. `
|
|
222
|
+
action , the intent's rules become a hard production gate. `thunder guard <file>` previews it.
|
|
183
223
|
Browser-safe.
|
|
184
|
-
- **MCP server for AI agents.** `
|
|
224
|
+
- **MCP server for AI agents.** `thunder mcp` / `startMcpServer` speaks the Model Context
|
|
185
225
|
Protocol over stdio, exposing ThunderLang as native tools for coding agents (Claude Code,
|
|
186
226
|
Cursor, ...): `intent_verify_diff` (the gate), `intent_check`, `intent_lift`, `intent_run`,
|
|
187
227
|
`intent_test`, `intent_graph`, `intent_explain`. The agent checks its own output against the
|
|
@@ -233,7 +273,7 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
233
273
|
attribution , a metric moving after release is correlation, not proof this feature caused it).
|
|
234
274
|
This closes the "technical success is mistaken for outcome success" gap: an outcome is only
|
|
235
275
|
trustworthy with a guardrail and honest attribution.
|
|
236
|
-
- **Change Lens , what a branch/PR changed by meaning (`
|
|
276
|
+
- **Change Lens , what a branch/PR changed by meaning (`thunder changes`).** `thunder changes
|
|
237
277
|
<base>..<head>` git-diffs the `.intent` files, semantic-diffs each (reusing `diffGraphs`), and
|
|
238
278
|
reports the behavior-level changes: guarantees / never-rules / invariants / decisions added or
|
|
239
279
|
removed, verification removed, and , crucially , a claim that **lost its verification** is
|
|
@@ -250,7 +290,7 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
250
290
|
`invariant-without-verification` warns when a global law has nothing proving it (that is exactly
|
|
251
291
|
where a locally-valid change silently breaks the whole system). Invariants count toward
|
|
252
292
|
comprehension C2 (Structured). Example: `examples/TenantIsolation.intent`.
|
|
253
|
-
- **Code generation , deterministic TypeScript from intent (`
|
|
293
|
+
- **Code generation , deterministic TypeScript from intent (`thunder gen`).** `toTypeScript(ast)`
|
|
254
294
|
(`intent-codegen-v1`, no AI) generates what the intent fully determines , typed input/output
|
|
255
295
|
interfaces, and the **decision logic**, which is real and behaviorally identical to the runtime
|
|
256
296
|
evaluator (proven by a property test over the input space) , and leaves honest `TODO` markers
|
|
@@ -259,33 +299,33 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
259
299
|
token becomes a string literal). **Now also generates C# and Java** (`--target csharp|java`):
|
|
260
300
|
typed records + the same first-hit decision logic, translated per language (C# `==` + `.Contains`;
|
|
261
301
|
Java `Objects.equals`, so string equality is value-correct, not reference `==`) via a
|
|
262
|
-
dialect-aware `exprToCode`. `
|
|
302
|
+
dialect-aware `exprToCode`. `thunder gen <file> [--target typescript|csharp|java] [--out <dir>]`. Pure
|
|
263
303
|
/ browser-safe and exported from `/core`, so the **playground now has a "Code" tab** , change
|
|
264
|
-
the intent, watch the code change. Completes the round-trip with `
|
|
304
|
+
the intent, watch the code change. Completes the round-trip with `thunder lift` (code -> intent).
|
|
265
305
|
- **Fix: non-mission root files no longer render as `# null`.** A standalone `event` / `api` /
|
|
266
306
|
`service` / `capability` file has no `mission`, so the graph titled its root node `null` and the
|
|
267
307
|
docs rendered `# null` (visible in the playground's BillingService / API / event examples). A
|
|
268
308
|
new `subjectName(ast)` derives the title from the primary construct, so these render under their
|
|
269
309
|
real name everywhere (graph, docs, generated code).
|
|
270
|
-
- **Comprehension Contract , the C0..C7 understanding level (`
|
|
310
|
+
- **Comprehension Contract , the C0..C7 understanding level (`thunder comprehension`).** The
|
|
271
311
|
measurable backbone of the Software Understanding System: `comprehensionLevel(ast)` scores how
|
|
272
312
|
well-understood a mission is, deterministically, from C0 (Unknown) through C4 (Verified) which
|
|
273
313
|
IL determines on its own, up to C5 (Observed), C6 (Teachable), and C7 (Governed) which a sibling
|
|
274
314
|
lifts by attaching evidence (`--observed` = OpenThunder/runtime, `--learning` = Skills Tech Talk,
|
|
275
315
|
`--governed` = Guardian + Workspace/Ledger). The ladder is cumulative (a gap caps the level) and
|
|
276
316
|
honest (a level is never claimed on evidence IL does not have; each missing rung names its owner).
|
|
277
|
-
`
|
|
317
|
+
`thunder comprehension <file|dir>` reports the level + the next rung; `intent-comprehension-v1` is
|
|
278
318
|
the shared contract every product reads. Pure / browser-safe, exported from `/core`, typed.
|
|
279
|
-
- **Intent Lens , Intent Scope + Focus Graph (`
|
|
319
|
+
- **Intent Lens , Intent Scope + Focus Graph (`thunder focus`).** A Focus Graph is a
|
|
280
320
|
deterministic subgraph of the Intent Atlas around a selected scope (a mission, a feature
|
|
281
321
|
query, or `--nodes a,b`), with every node tagged by WHY it is in focus (selected / governing
|
|
282
322
|
/ dependency / dependent / implementation / verification / risk / contextual) and bounded by
|
|
283
323
|
`--depth`. `makeScope` builds the typed Intent Scope; `buildFocusGraph` the subgraph;
|
|
284
324
|
`intentBrief` a deterministic what/who/guarantees/prohibitions/risks/unknowns brief whose
|
|
285
|
-
confidence is the weakest in scope (honesty). `
|
|
325
|
+
confidence is the weakest in scope (honesty). `thunder focus <mission|query|--nodes>
|
|
286
326
|
[--depth N] [--json]`. Built over the existing Atlas (not a fork); pure and browser-safe so
|
|
287
327
|
Studio / OpenThunder / RepoMastery / Skills Tech Talk consume one focused representation.
|
|
288
|
-
- **Focused scanner queries (`
|
|
328
|
+
- **Focused scanner queries (`thunder risks | gaps | unverified | coverage | unknowns |
|
|
289
329
|
contradictions`).** Part 3 of the Intent Scanner: one deterministic question each over the
|
|
290
330
|
shared Intent IR + Fable findings (`scan-queries.mjs`, `intent-scan-view-v1`), so a person
|
|
291
331
|
can ask "what is unverified?" or "what is the verification coverage?" without reading the
|
|
@@ -296,68 +336,68 @@ The executable + interoperable release. Everything is deterministic and requires
|
|
|
296
336
|
under-counted never-rule verification (and coverage read wrong). Never-rules with a `verify`
|
|
297
337
|
now emit `verified_by` edges + a `verify-declared` status, and `graphToSource` round-trips
|
|
298
338
|
them. Every downstream consumer (OpenThunder, RepoMastery) sees never-verification faithfully.
|
|
299
|
-
- **Code actions + autocorrect (`
|
|
339
|
+
- **Code actions + autocorrect (`thunder code-actions` / `apply-fix`).** `getCodeActions`
|
|
300
340
|
surfaces the available quick-fixes, safety-graded (`safe` autocorrects and `reviewable`
|
|
301
341
|
diagnostic fixes); `autocorrectSource` applies only meaning-preserving header fixes
|
|
302
342
|
(`goals` -> `goal`, `nevers` -> `never`, stray trailing colons), never a valid keyword
|
|
303
343
|
in another context (a decision's `inputs` sub-block is deliberately left alone).
|
|
304
|
-
`
|
|
344
|
+
`thunder code-actions <file>` lists them; `thunder apply-fix <file> [--write]` applies the
|
|
305
345
|
safe ones and reports the reviewable ones for a human. Both pure and browser-safe.
|
|
306
|
-
- **Per-audience docs (`
|
|
346
|
+
- **Per-audience docs (`thunder docs --lens`).** `thunder docs <file>` renders a mission as
|
|
307
347
|
Markdown; with `--lens <lens>` it produces an audience-specific doc that weaves that
|
|
308
|
-
lens's
|
|
348
|
+
lens's ThunderLens notes inline next to the input, output, guarantee, or never they
|
|
309
349
|
annotate, and states up front that notes are documentation, not verification. `--out`
|
|
310
350
|
writes the file; otherwise it prints. `renderLensDoc` is pure and browser-safe.
|
|
311
|
-
- **Intent AI event sink (`intent-ai-events-v1`).** `
|
|
351
|
+
- **Intent AI event sink (`intent-ai-events-v1`).** `thunder ai approve` / `reject` now
|
|
312
352
|
persist their integration event to an append-only JSON-Lines log at
|
|
313
353
|
`.intent/ai-events.jsonl`, so a project keeps a durable audit trail of every AI action.
|
|
314
|
-
`
|
|
354
|
+
`thunder ai events [dir] [--subject <id>]` reads it back (who did what, and the status
|
|
315
355
|
move). Pure sink module (`recordEvent`, `parseEventLog`, `serializeEventLog`, `timeline`),
|
|
316
356
|
exported from the barrel; rejects unknown event types; append-only (never mutates).
|
|
317
|
-
- **
|
|
357
|
+
- **ThunderLens notes CLI (`intent-notes-v1`).** `thunder notes <file>` lists the compiled
|
|
318
358
|
`note <lens>:` blocks grouped by lens, each with its target (mission / input / output /
|
|
319
359
|
guarantee / never) and source line; `--lens <lens>` filters to one audience and `--json`
|
|
320
360
|
emits the report. Notes explain meaning for a reader and are never verification. Reuses
|
|
321
361
|
the parser's `ast.notes` (no new parsing).
|
|
322
|
-
- **Intent Ledger (`intent-ledger-v1`).** `
|
|
362
|
+
- **Intent Ledger (`intent-ledger-v1`).** `thunder ledger <file.json>` / `verifyLedger`, `record*`,
|
|
323
363
|
`explain` keep the append-only, hash-chained (tamper-evident) record of a project's MEANING and
|
|
324
364
|
history: why a mission was built, who approved it, what was assumed, which inferred intent a human
|
|
325
365
|
corrected, which risks were accepted, what was verified, which lessons went stale. Each entry hashes
|
|
326
366
|
over the previous, so history cannot be quietly rewritten , `verifyLedger` locates any break to the
|
|
327
|
-
entry. Deterministic (caller supplies timestamps). `
|
|
367
|
+
entry. Deterministic (caller supplies timestamps). `thunder ledger <file> --subject <id>` explains
|
|
328
368
|
one mission's provenance; exit non-zero on a broken chain. Browser-safe.
|
|
329
|
-
- **Intent Simulator (`intent-simulate-v1`).** `
|
|
369
|
+
- **Intent Simulator (`intent-simulate-v1`).** `thunder impact <base> <proposed>` / `simulateChange`
|
|
330
370
|
estimates a change's impact BEFORE implementation: the deterministic BLAST RADIUS (transitive
|
|
331
371
|
reach over the intent graph, by node type), the risk it would introduce, contradictions, and
|
|
332
372
|
release risk , keeping deterministic dependency impact, rule-derived risk, AI-predicted (null in
|
|
333
373
|
deterministic mode), and unknown impact SEPARATE and honest. Browser-safe.
|
|
334
|
-
- **Intent Guardian (`intent-guardian-v1`).** `
|
|
374
|
+
- **Intent Guardian (`intent-guardian-v1`).** `thunder guardian <before> <after>` / `guardianReport`
|
|
335
375
|
detects drift a change introduced: what changed (semantic diff by mission identity, rename-safe),
|
|
336
376
|
what intent it affects, the risk it INTRODUCED (findings new in after), what must be reverified
|
|
337
377
|
(changed contract elements + invalidated approvals), and which missions' learning is now stale.
|
|
338
378
|
`needs-attention` only on newly-introduced blocking risk; exit non-zero gates a PR. Browser-safe.
|
|
339
|
-
- **Intent Scanner + Fable (`intent-scan-v1` / `intent-fable-v1`).** `
|
|
379
|
+
- **Intent Scanner + Fable (`intent-scan-v1` / `intent-fable-v1`).** `thunder scan [dir]` runs the
|
|
340
380
|
deterministic pipeline , parse -> Intent IR -> Fable findings -> risk themes , and prints an
|
|
341
381
|
executive/risk summary + a highest-impact remediation sequence; `--json` for the machine report,
|
|
342
382
|
`--ir <path>` to emit the shared Intent IR. Fable is the rule authority OVER the diagnostics
|
|
343
383
|
catalog (risk category + detection strategy + remediation + suppression policy); every finding is
|
|
344
384
|
fully explained (never "AI detected a possible issue"). `scanProject`, `universalPack`,
|
|
345
385
|
`fableRuleFor`, `toFinding` exported. Browser-safe.
|
|
346
|
-
- **Repo-wide health report.** `
|
|
386
|
+
- **Repo-wide health report.** `thunder report [dir]` / `buildReport(files)` aggregates every
|
|
347
387
|
.intent file into an intent-health summary (`intent-report-v1`): diagnostics by severity +
|
|
348
388
|
area, top codes, and coverage (guarantees verified, missions with tests, outcomes contracted).
|
|
349
|
-
- **SARIF code scanning.** `
|
|
389
|
+
- **SARIF code scanning.** `thunder check <path> --format sarif` emits a SARIF 2.1.0 log
|
|
350
390
|
(`toSarif`), so diagnostics appear natively in GitHub/GitLab code scanning and SARIF-aware
|
|
351
391
|
IDEs , with rule metadata, level mapping, and precise line regions where known.
|
|
352
392
|
- **Complete diagnostics reference.** Legacy core check codes (`missing-goal`,
|
|
353
393
|
`guarantee-without-verification`, ...) are now documented and explainable via
|
|
354
|
-
`CORE_DIAGNOSTICS` / `ALL_DIAGNOSTICS`, so `
|
|
394
|
+
`CORE_DIAGNOSTICS` / `ALL_DIAGNOSTICS`, so `thunder explain <any-code>`, `thunder rules`, and
|
|
355
395
|
`docs/diagnostics.md` cover everything the check pass emits (60 codes). A guard test keeps it
|
|
356
396
|
complete. The canonical `DIAGNOSTIC_RULES` stays IL-* only.
|
|
357
397
|
- **Canonical proof envelope (`intent-proof-v1`).** The `.intent-proof.json` shape is now a
|
|
358
398
|
published, versioned contract: `intentProofJsonSchema()` (JSON Schema), `validateProof()`
|
|
359
|
-
(dependency-free structural check), `
|
|
360
|
-
`
|
|
399
|
+
(dependency-free structural check), `thunder proof --schema`, and a well-formedness gate in
|
|
400
|
+
`thunder verify`. Browser-safe via `/core` so signers/renderers validate the envelope with
|
|
361
401
|
no Node build.
|
|
362
402
|
- **Browser-safe `/core` subpath**, the committed `intent-graph.schema.json`, and the
|
|
363
403
|
canonical 49-rule `IL-*` diagnostic catalog (60 codes documented including legacy core codes).
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,201 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 Skills Tech Talk, LLC
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ThunderLang
|
|
2
|
+
Copyright 2026 Skills Tech Talk, LLC
|
|
3
|
+
|
|
4
|
+
This product includes software developed by Skills Tech Talk, LLC
|
|
5
|
+
(https://thunderlang.dev).
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0. See the LICENSE file.
|
|
8
|
+
|
|
9
|
+
ThunderLang, the ThunderLang logo, and related marks are trademarks of
|
|
10
|
+
Skills Tech Talk, LLC. The Apache-2.0 license covers the source code only and
|
|
11
|
+
does not grant any right to use these marks. See TRADEMARKS.md.
|
|
12
|
+
|
|
13
|
+
ThunderLang was previously introduced as IntentLang. The paradigm it implements,
|
|
14
|
+
Intent-Oriented Programming, and its technical vocabulary (Intent Graph, Intent
|
|
15
|
+
Atlas, Intent Contracts, Intent IR, Intent Diff, Intent Proof) are retained.
|
package/README.md
CHANGED
|
@@ -6,10 +6,7 @@ and, for decisions, lifecycles, and outcomes, **executes the intent directly** (
|
|
|
6
6
|
generated). Every output is pure and deterministic: the same source always yields the same
|
|
7
7
|
result, so intent can be diffed, merged, tested, and trusted.
|
|
8
8
|
|
|
9
|
-
Part of [ThunderLang](https://thunderlang.dev), the intent
|
|
10
|
-
|
|
11
|
-
> Previously published as `@skillstech/intentlang`. The package was renamed to
|
|
12
|
-
> `@skillstech/thunderlang`; the old name remains as a deprecated alias.
|
|
9
|
+
Part of [ThunderLang](https://thunderlang.dev), the intent language for AI-era software.
|
|
13
10
|
|
|
14
11
|
## Install
|
|
15
12
|
|
|
@@ -54,7 +51,7 @@ intent diff <before> <after> intent merge <base> <ours> <theirs>
|
|
|
54
51
|
intent lift <file> intent approve <file> intent drift <file>
|
|
55
52
|
```
|
|
56
53
|
|
|
57
|
-
Run `
|
|
54
|
+
Run `thunder help` for the full reference.
|
|
58
55
|
|
|
59
56
|
## Executable intent
|
|
60
57
|
|
|
@@ -94,7 +91,7 @@ Export the tokens to **W3C Design Tokens**, a drop-in **CSS** sheet, the whole g
|
|
|
94
91
|
|
|
95
92
|
The compiler also catches the mistakes prompts ship: a secret-typed field on an event payload
|
|
96
93
|
(`IL-SEC-001`), a sensitive API output with no auth (`IL-SEC-002`), a mistyped field
|
|
97
|
-
(`IL-TYPE-001`), and more , the full catalog is `
|
|
94
|
+
(`IL-TYPE-001`), and more , the full catalog is `thunder rules` / [docs](https://thunderlang.dev/docs/diagnostics).
|
|
98
95
|
|
|
99
96
|
## Use as a library
|
|
100
97
|
|
|
@@ -141,10 +138,10 @@ so it keeps bundling everywhere. The `.` entry is this same surface plus the Nod
|
|
|
141
138
|
Compilation produces a canonical graph of 40 typed node kinds and 20 directed
|
|
142
139
|
relationship types, across five profiles (product, experience, system, delivery, design).
|
|
143
140
|
The vocabulary is closed and enforced (an anti-fork test guarantees the compiler only
|
|
144
|
-
emits canonical types); `
|
|
141
|
+
emits canonical types); `thunder schema` emits its draft-07 JSON Schema, also shipped as
|
|
145
142
|
the static `intent-graph.schema.json` in this package (CI-guaranteed in sync with the
|
|
146
143
|
code). Consumers (OpenThunder, Repo Mastery, SkillsTech Studio) build to this graph, and
|
|
147
|
-
`
|
|
144
|
+
`thunder validate <graph.json>` self-checks a graph against the canonical vocabulary.
|
|
148
145
|
|
|
149
146
|
## Output location
|
|
150
147
|
|