Skip to content

Thesis readiness: engine-faithful import and printing, fuzz harness, editor features - #70

Merged
Conava merged 12 commits into
mainfrom
thesis-readiness
Sep 26, 2026
Merged

Conava merged 12 commits into
mainfrom
thesis-readiness

Conversation

@Conava

@Conava Conava commented Sep 26, 2026

Copy link
Copy Markdown
Contributor

Description

Gets the tool ready to be measured for the thesis.

  • Validator, importer and printer follow what Operaton parses, deploys and runs, and every change the import makes is warned or refused with the engine's reason.
  • A seeded round-trip fuzz harness (tests/fuzz.test.ts) and the printer fixes it found; the printer now keeps route order and prints Operaton's invoice example the same on every pass.
  • Editor: hover, outline, go to definition, references, rename and slot-aware completion.
  • Comments and tests cut to what earns its place; language facts live once in vocabulary.ts.
  • Decision records consolidated and corrected against the code; docs/bpmn-coverage.md added.
  • The engine suite runs in CI against one shared engine (about 20 s instead of 4 min locally).

Steps to Test

  1. npm ci && npm run build && npm test with Docker running (or SKIP_DOCKER_TESTS=true).
  2. cd tests && FUZZ_N=2000 FUZZ_OUT=/tmp/fuzz npx vitest run fuzz.test.ts: /tmp/fuzz/summary.json shows "failingSeeds": [].
  3. In VS Code, hover and rename a variable in an example and open the outline.

Checklist

  • I have tested this change manually
  • I have added or updated tests as appropriate
  • All checks pass (npm test, npm run lint, npm run format:check)
  • I have updated documentation as needed

Three printer and serializer fixtures carried a result variable beside a class binding, the shape the validator and the engine now refuse.
Each is rebound with an expression, keeping every value and attribute position the rows pin.
BpmnParse.parseServiceTaskLike fails the deployment when a class or delegateExpression binding carries a result variable, and only builds the expression behaviour with it.
The validator now reports the combination on the resultVariable key of a service, send, or decide task, quoting the engine's refusal and naming the expression binding as the fix.
The importer refuses it through UnsupportedServiceTaskFormError, reading the older resultVariableName spelling as the engine does.
The engine-attributes golden rebinds AssessBodywork with an expression and is refrozen, since it carried the exact shape the engine refuses.
ADR-0043 records the decision and ADR-0014's refusal list gains the case.
…er and printer

The validator and importer now refuse what BpmnParse refuses and read attributes where the engine reads them: expression and value shapes, timer and retry shapes, job settings, listeners, scope rules for handlers, starts, races and loops, one executable process per document. Adds the engine deploy sweep over every golden, fixture and example, and corrects ADR-0002.
…cument BPMN coverage

Comments cut to what the code cannot say, tests folded into tables and whole-output pins, importer and writer tables derived from one source, README and ADR claims corrected against the code, and a BPMN coverage table with its limitations.
A seeded generator, a model comparator up to documented canonicalization, and a regression table. The printer fixes cover loops entered by gotos, jump cycles, loops with no exit, branch ownership, link pairs, boundary handler order, authored ids, and independence from element and route order.
Import warns where the rebuilt document would deploy or run differently, sorts its warnings into dropped content, respellings, behaviour changes and content carried as written, mints ids for elements the engine deploys without one and refuses the ones it cannot deploy or run, and never names a minted id in a refusal.
Export escapes tabs and carriage returns in attribute values and carries isStartableInTasklist as a process header setting.
The printer keeps an exclusive split's routes in the order the engine tries them, folds a loop only where the engine tests its back edge in the printed order, and prints Operaton's invoice example the same on every pass.
The model comparator keeps the joins and condition order that change execution, and the parser words a mistyped step keyword and a missing ) in plain language.
Copilot AI lite review requested due to automatic review settings September 26, 2026 21:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Conava
Conava merged commit efbb8d0 into main Sep 26, 2026
2 checks passed
@Conava
Conava deleted the thesis-readiness branch September 26, 2026 21:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants