open.csr · PR #9 · obot.roadmap #113 increment B

The text-block editor, running here

The Demo app's Text pane can now be edited: prose changes in the browser, every {{ard:…}} resolves against the committed ARD, and the numeric-fidelity gate runs on each keystroke. This page is not a recording of that. The gate code, the diff writer and a real ARD are inlined below, so every step you click executes the same functions the build runs — and each one states what it expects and then checks itself.

gates site/demo/text-core.js editor site/demo/editor-core.js data outputs/t-disposition · 84 ARD rows prose library/text/TXT-E3-1101.md · TXT-E3-0502.md merged to dev bb58906

Click any step to load its exact input, or run the whole protocol and watch twelve checks execute against the real code.

not run

Start anywhere

no step selected

Both blocks below hold their committed source. Pick a step from the protocol on the left — it will type into the block for you, run the gates, and report whether what happened is what it said would happen.

The open.csr Demo app Text pane with a block editor open: block source on the left, the prose with computed values marked on the right, and a failing gate strip below reporting a typed number.
The same editor in situ, in the Demo app's Text pane — source left, prose right, gates below, the patch under that. The blocks on this page are that surface with the site chrome removed.

What is real here

  • The gates. Binding resolution, value formatting, cross-references and the numeric-fidelity check are text-core.js, inlined unmodified — the same module the build imports. An edit that passes here passes CI.
  • The data. A real ARD from the CDISCPILOT01 pipeline, all 84 rows, columns trimmed to what resolution reads. Row counts are exact, so "ambiguous binding: 4 rows" is a count, not a caption.
  • The patch. editor-core.js's diff writer, hunks offset past the frontmatter. The file you download applies with git apply.

What is staged

  • The ARD is inlined rather than fetched; in the app it loads from demo/ard/<slug>.json when a block is opened.
  • Only two of the fourteen blocks are here, and the site's navigation, block provenance and binding tables are left out.
  • The steps type for you. Every field is editable — type anything and the gates run on it.

What the editor still cannot do

  • Approve anything. Tier, approval state and the digit allowlist are frontmatter, which never reaches the browser; hunks are offset past it, so no patch composed here can reach those lines. In-app sign-off stays deferred.
  • Write anything. No endpoint, no token, no commit. The output is a patch a human applies in a clone, where it can be reviewed.
  • Edit a spec. Prose needs no runtime; an analysis.yaml change needs the pipeline to re-run, and that round-trip is still an open design question.