Skip to content

Ship a first-party LPP provider for real OPY project workflows #170

Description

@Teakowa

Product milestone: wrightkit/wright#242
Depends on distribution design: wrightkit/wright#240
Coordinates with product boundary: wrightkit/wright#243
Protocol dependency: wrightkit/language-provider-protocol#16

Goal

Expose opy-rs as the first-party LPP provider used by Wright for real OverPy project checking and compilation, while keeping all OPY project loading, preprocessing, source semantics, diagnostics/provenance, and compiler behavior owned by opy-rs.

Context

Wright's current milestone requires check, lint, compile, and analyze to work on real OverPy projects such as OWBastion/Bastion and Teakowa/Overwatch-AI-PVE. The provider is the owner-side delivery boundary that lets OPY implementation releases advance independently from Wright releases.

The provider must be a thin process surface over existing opy-rs owner capabilities. It must not create a second OPY implementation or expose owner-internal AST/HIR/WIR through LPP.

The approved Wright boundary is entry-based: Wright resolves the user-selected path from the invocation cwd and delegates OPY project discovery to opy-rs. opy-rs therefore owns #!mainFile, #!include, preprocessing/macros, and the source closure. language-provider-protocol#16 owns the narrow wire change required so this owner-side filesystem loading does not require Wright to construct the full project DocumentSet.

Scope

  • Provide a spawnable first-party LPP process owned and released by opy-rs.
  • Implement the LPP capabilities required by the current Wright milestone, beginning with check and compile.
  • Accept the selected OPY entry through the approved LPP entry/project-loading contract and load the real project through opy-rs ownership.
  • Handle #!mainFile, reachable includes, preprocessing/macros, project/source closure, and locale/options required by the supported workflow inside opy-rs.
  • Preserve structured owner diagnostics and source-file identity across the LPP boundary.
  • Produce the approved Workshop artifact for successful compile requests without exposing Rust/compiler implementation types on the wire.
  • Participate in the source/provenance handoff required by the approved Wright contract for Wright-owned lint/analyze; do not invent provider-private wire semantics.
  • Package/release the provider artifact according to the approved convention from wright#240 so Wright can resolve it independently.
  • Use pinned real revisions of Bastion and Overwatch-AI-PVE as end-to-end owner evidence in addition to focused regression/contract evidence.

Non-goals

  • Implementing Wright lint/analyze rules inside opy-rs.
  • Moving canonical Workshop semantics, WIR, validation, catalog, localization, or emission ownership out of workshop-rs.
  • Exposing OPY AST/HIR/compiler internals over LPP.
  • Requiring Wright to scan OPY files, interpret #!mainFile, or resolve #!include.
  • Implementing a package registry, dependency solver, provider installer, or Wright cache policy.
  • Implementing DEL/OSTW support.
  • Weakening source/compiler conformance expectations to make real projects pass.
  • Requiring generated Workshop text identity with upstream OverPy when observable/canonical semantics are equivalent.
  • Adding generalized LSP workspace synchronization or unsaved-document overlays in this milestone.

Acceptance criteria

  • The provider initializes through the published LPP contract and advertises only capabilities it actually supports.
  • The provider can receive a selected OPY entry without requiring Wright to preload the complete OPY source closure.
  • lpp/check operates on supported real multi-file OPY projects through opy-rs project loading and returns structured diagnostics associated with the correct original source documents.
  • lpp/compile operates on the same project model and returns no Workshop artifact when error-severity diagnostics prevent compilation.
  • Successful compile requests return the Workshop artifact format approved by the cross-repo design without leaking owner-internal AST/HIR/WIR or Rust types.
  • Project entry/root, #!mainFile, includes/reachable files, preprocessing/macros, and supported locale/options needed by the pinned Bastion and Overwatch-AI-PVE workflows are handled by opy-rs, not reconstructed in Wright.
  • Provider stderr/logging never corrupts the stdio protocol stream, and process lifecycle/shutdown conforms to LPP.
  • Provider artifact/release metadata follows the approved first-party distribution convention and can be consumed without a Wright release.
  • Any blocker demonstrated to belong to OPY source semantics or compiler/lowering is fixed in opy-rs; canonical Workshop blockers are reassigned to workshop-rs rather than bypassed.
  • Pinned Bastion and Overwatch-AI-PVE provider check / compile workflows are independently rerun after implementation.
  • Implementation ablation that disables the provider project-loading or owner compile path causes the relevant real-project evidence to fail again.

Dependencies / ownership

  • wrightkit/wright#240: approved first-party provider distribution convention.
  • wrightkit/wright#243: approved entry-based Wright product/provider seam.
  • wrightkit/language-provider-protocol#16: narrow process/wire contract for provider-owned filesystem project loading from an entry target.
  • opy-rs#157: owner for residuals proven to belong to OPY compiler/lowering/canonical-WIR convergence.
  • workshop-rs: canonical Workshop semantics.

Readiness

Ready. Distribution and product ownership decisions are resolved. Implementation may proceed in parallel with language-provider-protocol#16, but must consume that owning wire contract rather than inventing an OPY-private protocol or moving project discovery into Wright.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions