Skip to content

docs: rewrite the Task 0 proposal around a joint EMF implementation - #101

Merged
ExtraToast merged 1 commit into
mainfrom
docs/task-0-joint-implementation
Sep 14, 2026
Merged

ExtraToast merged 1 commit into
mainfrom
docs/task-0-joint-implementation

Conversation

@ExtraToast

Copy link
Copy Markdown
Contributor

Part of #78, and amends the tooling decision #81 builds on. Follows #100: the proposal uses Project, Application and Process throughout. #56 stays open for the next task.

What this branch does

The Task 0 proposal asked to substitute TypeScript and zod for the prescribed Ecore, QVT-OM and Acceleo stack, and the course did not accept that. The proposal now describes the project as it will be built: a joint implementation, with the EMF stack (Ecore, Xtext, OCL, QVT-OM, Acceleo) and the TypeScript compiler each implementing the same pipeline, written separately, and both held to the same committed expected outputs.

The edits were made in Overleaf and the mirror was pulled back over docs/mde/task-0-proposal/, as docs/mde/README.md requires. Most of the existing phrasing is untouched:

  • Section 7 (Tooling Choice). The substitution request and its "requires approval" are gone. In their place: the joint implementation, parity against shared expected outputs, the EMF tools running headless through Maven for most of the project, and the projects staying loadable in Eclipse Modeling Tools so examiners can open the metamodels, validate the examples against OCL, and run the transformation and generator from committed launch configurations.
  • Sections 4, 5, 6 and 8. One clause or sentence each names the EMF counterpart beside the TypeScript one: the oracle, the two metamodel definitions, Xtext/OCL, QVT-OM and Acceleo per stage, and parity as evidence.
  • Tables 1 and 2. Their second columns now explain each concern and output for a reader who does not work with deployments, in project, application and process terms.
  • Vocabulary from refactor: rename the authored hierarchy to Project, Application and Process #100. Service Intent is Project Intent in the title and every section, the metamodel list names Project, Application and Process, and prose about the model says application and process. Kubernetes object names (a workload, a service, workload resources) are unchanged.
  • Appendix removed. The worked auth example, its 13 listing files, the Example column and every reference to them are gone, along with the YAML listing style in main.tex.
  • Live references. "The table", "listed below" and "the next stage" are now Table~\ref and Section~\ref links.

The decisions later tickets inherit

Eclipse is not needed to build, but is supported for examination. ADR 0108 said "no Eclipse IDE"; the proposal now promises examiners an Eclipse path. 0108 carries an amendment, emf/docs/architecture.md's Toolchain section and CLAUDE.md say the same, and #81 (walking skeleton) gained an acceptance criterion that the projects import and run in Eclipse Modeling Tools. CI still runs Maven only.

Report conventions. docs/mde/README.md now records that tables use [!htbp], \small and ragged-right columns, and that prose never refers to "the table below" without a live reference. Its state row says the proposal was re-mirrored on 2026-09-14.

One mismatch was resolved before editing: Overleaf's Table 1 said "release groups" where the mirror said "parts released together". The mirror's wording went to Overleaf first; that cell has since been replaced by the plain-terms text.

Verification

  • Overleaf compiles to a title page, contents and three body pages, with both tables placed under their sections and every reference rendered as a link.
  • diff_project against the Overleaf project after the final pull: no differences.
  • node scripts/lint-adrs.ts emf reports 9 files clean, npm run lint:adrs reports 93 files clean, npm run lint:links reports 172 files clean, npm run lint:docs reports 31 claim(s) clean, and vitest passes 305 tests.

@ExtraToast ExtraToast added type: docs Documentation-only change. area: tooling Reusable workflows, Gradle, templates, Renovate, and API tooling. component: docs Runbook, README, API docs, or documentation tooling. labels Sep 14, 2026
@ExtraToast ExtraToast self-assigned this Sep 14, 2026
@ExtraToast
ExtraToast merged commit 08e69ce into main Sep 14, 2026
13 checks passed
@ExtraToast
ExtraToast deleted the docs/task-0-joint-implementation branch September 14, 2026 13:00
ExtraToast added a commit that referenced this pull request Sep 16, 2026
#139)

#56's remaining items, the ones #101 and #102 did not already supersede. Every
edit was made in Overleaf and mirrored back, because the mirror is never the
source; a diff against the project reports no differences either way.

**Delivery.** The proposal said release CI applies the resources with
`kubectl apply -k`, which is a local imperative command standing in for a
decision this project does not make. How a Deliverable Set reaches a cluster is
defined separately from the model, so the text now says that plainly: the model
states what should be true and what must be applied before what, and whether a
pipeline applies it directly or a cluster-side reconciler consumes the
pipeline's published output is a choice the specification is written to survive
either way.

**Output layout.** It said one Deliverable Set per application, which is the
shape the model rejected: there is one tree for the estate, laid out per project
and application by the path plan the resolved model carries, produced by six
generators each run once over the whole composed input. That last part is not
decoration; it is what lets a value one application derives from another be
computed in one place.

**Platform data.** The inputs paragraph named "naming and label rules,
defaults, ingress and storage classes, the alert catalogue and cluster
capabilities". Three of those do not exist. There is no alert catalogue, because
PromQL belongs to the monitoring stack; no storage classes, because every volume
takes the cluster default; and no naming rules left to state. The paragraph now
names the pinned input set the model actually closes over, each input carried by
digest. "Monitoring rules" became "monitor targets" in the next paragraph for
the same reason.

**The numbers were stale.** `auth` produces eleven files of about 620 lines, not
ten files of about 890.

The coursework README's task table gains the three deadlines, the Task 1
Overleaf project and directory that now exist, and a line saying the module
table under `emf/` carries the same task numbering, so the two are read together
rather than restating each other.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: tooling Reusable workflows, Gradle, templates, Renovate, and API tooling. component: docs Runbook, README, API docs, or documentation tooling. type: docs Documentation-only change.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant