The Finish-Up-A-Thon arc

This repo started life in 2019 as a Google Summer of Code work product: a sample parser for the PLUTO DSL that built a parse tree out of a single hard-coded script and "ran" it by walking the tree. It was a proof of concept that never grew past one example file. It sat dormant for nearly seven years.

For the GitHub Finish-Up-A-Thon (May–June 2026), it's been revived as an actual installable PLUTO transpiler.

Before — the GSoC snapshot

Tag v0.1-gsoc-2019, branch legacy/gsoc-2019.

Aspect State in 2019
Grammar ~30 lines, covered initiate, initiate and confirm (step), parallel until all, switch on, event declarations
Runtime Tree-walking interpreter inside the parser file. Threaded but missing many features.
Codebase Two .py files, mixed concerns, several syntax-level bugs (typos like setExecutionSatus, missing import types, super.__init__ with no parens)
Tests None
Packaging None — python pluto_ecss.py only
CLI None — entry point hard-coded to script.pluto
Output Side effects from a tree walk; no Python emission
Docs README sketched the design but didn't say how to use it

After — main, May 2026

Aspect State in 2026
Grammar if/else, case, while, for, repeat … until, wait for event / wait until with with timeout, := assignment, raise event, log, inform user, in parallel until one completes, full expression grammar (arithmetic / comparison / boolean), watchdog handlers — plus everything from 2019
Pipeline Transpiler: PLUTO → parse tree → Python source. Generated .py imports a runtime library and is independently runnable / debuggable / shippable.
Runtime pluto_ecss.runtime with Procedure, Event, Activity, parallel_until_all, wait_for_event, watchdog dispatch, etc. Activities are pluggable.
Package pip install pluto-ecss, proper src/ layout, packaged grammar file
CLI pluto-ecss parse | compile | run | demo with -v for runtime logging
Demo pluto-ecss demo — live Rich-based TUI of a fake satellite reacting to procedure activities in real time
Errors Friendly parse errors with file:line:column, source caret, structural hints
Tests 48 pytest cases covering parser, transpiler output, runtime, end-to-end CLI, and the TUI
CI GitHub Actions matrix on Python 3.9 / 3.11 / 3.13
Highlighter Pygments lexer for .pluto files; powers this docs site
Docs This mkdocs site, deployed from docs/ via CI
Formatter pluto-ecss fmt — idempotent canonical pretty-printer; --check mode for CI gating
Generator pluto-ecss gen spec.yaml — declarative YAML → PLUTO scaffold for templating procedures
Playground Browser-based PLUTO compiler and runner, no install required, served from /playground/ on the docs site
ECSS-E-ST-70-32C coverage Procedure/step sub-bodies (A.1.7), property references (A.3.9.8), set-context (A.3.9.10), step + activity refer-by (A.3.9.12, A.3.9.26, A.3.9.27), record + array activity arguments (A.3.9.28), reporting data + save context (A.3.9.5, A.3.9.25), continuation tests with all seven actions (A.3.9.33)

AI-assisted revival

This revival was AI-assisted. The architectural decisions (transpiler over interpreter, Rich for the TUI, lowering WORD priority to fix the keyword-vs-identifier ambiguity in the Earley lexer, the runtime API surface) and the test design are mine; the AI assistant accelerated typing, drafted the Lark grammar's first cut, and surfaced the Earley lexer priority bug that would have taken me a couple of hours to chase down.