Skip to content

The scorecard ​

The course is organised around six failures that model-based engineering, declarative programming and code generation shared. Lesson 4 builds the list from the three histories that precede it. Every lesson after that marks one or more rows: which decision record or principle answers the failure, what artifact in the repository shows it working, and what the backlog still lists as open.

The rule for the scorecard is the course's rule for itself. A row may be called closed only when the lesson can point at a committed file, a decision record or a test. Where the repository answers a failure in part, the row says so and names the backlog item.

#The failureWhere SemanticSeams answers itStatus today
F1Some code cannot be generated, and generated code and hand-written code mix and rot togetherBehaviour is interpreted, not generated (ADR-0007). An operation says what implements it, the stub is written once and then owned (ADR-0012). Errors are declared in the model (ADR-0013). A language model drafts only behind the stub, and only tests derived from the model can accept the draft (ADR-0020). Generated and owned code never mix (principle 8).Closed. Tutorial chapter 9 is the worked example.
F2Hand edits never get back into the model or the generator; round-trip engineering never workedOne write path that edits the TriG text in place and keeps comments (ADR-0017). A line-level trace from every output line to the facts behind it (ADR-0019). seams check names a hand-edited output. The viewer writes an edited output line back as a model patch when regeneration reproduces the edit, for literals and for form fields. A copilot proposes model patches that wait for a person (ADR-0028).Closed for literals and form fields. Structural write-back beyond form inputs is open (backlog V2, V4).
F3Diagrams are pictures, not models; the view drifts from the thing it drawsOne named graph per model plus one for the seams (ADR-0001). A BPMN element's own id is its IRI fragment (ADR-0002). Diagrams are rendered from the graph (ADR-0004, ADR-0005, ADR-0008). Sequence diagrams and event storms are derived, never authored.Closed.
F4Models do not diff, merge or version, and the tooling is captive to one vendorThe model is TriG text in git. seams diff and seams plan classify changes as compatible or breaking. Vocabularies carry versions, and a model is migrated by SPARQL Update steps (ADR-0021). BPMN and DMN stay vendor-extension-free XML that any engine runs. The lock file records every output's generator version.Closed for text diff, change classification and migration. There is no model-level merge tool; two edits to one TriG file merge as text.
F5Every tool draws one layer; integration is glue, and no one can ask a question that crosses layersThe seams: the bridging predicates in ontology/seam.ttl (37 at the time of writing), each of which must earn a cross-layer query. A query catalog whose rows continuous integration asserts. Domains and bounded contexts above the system (ADR-0030), context-map relationships (ADR-0032) and the DDD profile (ADR-0033), with tutorial chapter 11 as the worked example.Closed for the questions in the catalog and the strategic layer above the system (M028 and M029 done).
F6Nobody trusts the generator: it is nondeterministic, opaque and unverifiable, and language models make all three worseSame model, same bytes (principle 6): sorted collections, no timestamps, the model identified by its content hash. Generators carry versions and preconditions, and a model that passes the shapes must generate (ADR-0016). Every output has a trace (ADR-0019). Scenarios in the model become tests (ADR-0014). A drafted generator is kept only when its golden test passes (ADR-0029). Continuous integration never calls a language model.Closed.

How a row is marked ​

Each later lesson ends with a Scorecard section. It names the rows the lesson moved, in this form:

F2, closed in part. The viewer's write-back turns an edited ifml:title in a generated page into a one-triple patch (lab, step 4). Structural edits beyond adding or removing a form input are refused; backlog V2 proposes sentence editing for the rest.

The status column above is the course's summary of those sections. It is a snapshot. When the backlog marks an item done, the row changes, and the lesson that owns it changes with it.

The two rows that are not failures ​

Two more things recur in the histories but are not on the scorecard, because they are not failures of the approach: the expressiveness cliff (any declarative language ends somewhere, and what lies beyond it must be written) and the social cost of a new notation (people must learn to read it). The course treats the first as the reason F1 exists at all, and the second as a design constraint the project meets with its "RDF invisibility" principle, which lesson 5 introduces. They are discussed where they arise rather than scored.

Released under the Apache-2.0 License.