Extend Engineering Paper
Contract-only Extension surface
The editor, template, codec, and presentation contributions below are planned. The production Flow reader currently renders installed Component targets as read-only unsupported Nodes; it has no renderer/modal/editor or decorator-to-package bridge. Multi-declaration containers and host presentation belong to the contract_only V2 in Node presentation and third-party UI. The V2 Canvas uses only host-owned component.declarative@2; rich editors, renderers, and non-empty settings remain blocked until RFC-014 and a separate versioned settings contract are both approved. The current V1 legacy setting remains a distinct compatibility branch: canonical schema and Rust require contractSnapshot · document, validate the snapshot on read, and keep it out of generic Component recovery and successor V2 authority.
Engineering Paper is the target editor for one Component supplied by the optional Engineering Paper package. Its Extension contract assigns templates, Document/PDF artifacts, editor elements, and the versioned manual to that package.
Choose the contribution point
| Goal | Contribution point |
|---|---|
| Add reusable calculation logic | core @px.function |
| Add a Component with a dedicated UI | @px.component |
| Add a reusable document template | Extension @px.paper template contribution |
| Add a section, formula, or evidence presentation | Extension editor element contribution |
| Add an importer or exporter | versioned Extension document-codec contribution |
| Add a Canvas Component | Component package @px.component export and flow.node(...) placement |
The target Engineering Paper surface exposes one Canvas Component: engineering_paper. Formula blocks and evidence tables remain inside its planned editor.
Connection rule
Initial successor V2 receives calculation values only through ports fixed by component declaration.inputs. A planned editor element projects a current Node input or field into a stable document block only after its separate settings/rich-surface contracts are admitted.
An Extension must not invent a hidden Flow invocation, dotted-path binding, private Run button, or raw MCP execution path.
A future deterministic Paper compiler may lower document.input(...) at publish/materialization time into fixed declaration inputs after separate approval; this is not Node-instance port materialization. Engineering Paper retains exactly one engineering_paper Component, so a template with a different input contract is unsupported until versioned settings and port-projection contracts exist. Generic package one-to-many support does not widen this inventory. Add input and instance-port materialization remain blocked on the same contracts.
Package layout
engineering-paper-extension/
├─ pyproject.toml
├─ src/<package>/
│ ├─ components.py
│ └─ templates.py
├─ editor/
│ ├─ package.json
│ └─ src/index.ts
├─ docs/
│ ├─ ko/
│ └─ en/
└─ tests/A successor V2 package uses the package-envelope manifest authority, requiredContractVersion: 2, and the exact seven-field ComponentRef including publisher. Its Canvas projection is host-owned. Editor assets, templates, codecs, viewers, print renderers, manuals, and non-empty settings remain deferred until both RFC-014 and the separate settings contract pass admission. px.Report and Report Workbench remain the separate .pxreport authoring surfaces.
No successor V2 release artifact bytes exist. The seven-field ComponentRef is a contract-only non-resolvable member shape, not a concrete identity: package/release digests must not be invented, and exact-ref creation, installation, and admission remain forbidden until actual bytes are measured.
Manual contract
Ship a versioned manual for each public contribution. Describe where the user finds it, its typed inputs and artifacts, supported hosts, permissions, recovery from a missing Component package, and migration behavior.