In development

Dependency contract

The current runtime dependency boundary and historical adoption record.

The confirmed 3 October policy supersedes the earlier prototype library exception: shipped engines and application/runtime libraries must be first-party. Zig 0.16.0 and its standard library, standard development tools, and OS/browser APIs are allowed platform boundaries; they are not RURAL-authored code. Competitor engines may be external migration sources or test oracles, never embedded runtime backends.

FP-NATIVE replaces the external visual renderer with owned Zig and Objective-C code using macOS AppKit, CoreGraphics and CoreText. System fonts replace the native font atlas. The macOS visual host retains the existing durable client/models; other targets have no native UI host, while engine/server builds stay independent. FP-WEB replaces htmx with owned same-origin navigation/search code. The local candidate has matching focused package/host/client tests and actual macOS store/connected UI plus website navigation proof. Evidence is retained in .local/completion-three-targets-2026-10-03/fp-native-ui-result.json and fp-web-ui-result.json. This is bounded candidate qualification, not shipment, all-panel certification, or a claim that the untouched main runtime is compliant. Clipboard/emoji interaction and the existing receipt-banner overlap remain explicit limits.

Licensed font/media content is inventoried separately from executable dependencies. Historical third-party artifacts and notices below are retained evidence, not active runtime adoption or permission to ship their code. Host UI/window allocations are outside the earlier counted core working-set proof.

Historical adoption record (superseded)#

Prototype dependency and native visual client contract#

Status: P04 adoption record, 20 September 2026. The root manifest now pins the P01-qualified raylib-zig revision; the engine and service seams do not import it. The isolated P01 spike built and opened a native macOS window from an external working directory. All first-party database and visual application code is Zig, pinned to Zig 0.16.0. External libraries may contain C and Objective-C; the language requirement does not imply a dependency-free executable.

Candidate stack and evidence#

Use raylib-zig with raylib 6.0 and its raygui bindings as the first qualification candidate for a native macOS arm64 application. Raylib provides the drawing, input and camera foundation; raygui supplies initial form controls. The primary workspace is 2D. A simple 3D lens displays the same records and selection IDs through another camera, without a second domain model.

The raylib-zig repository states that its bindings were tested against Zig 0.16.0 and raylib 6.0. GitHub's repository API resolved its development branch to 8758f4cd3a5ae0df6941c4715257223d34c5ad3e during this assessment. This is a candidate revision, not a locally validated dependency. The dependency manifest declares minimum Zig 0.16.0 and pins raygui. The example inventory includes 2D mouse zoom, 3D picking, Unicode text and GUI controls.

Raylib's 6.0 build integration handles macOS frameworks and GLFW's Objective-C implementation. Its GLFW default is OpenGL 3.3. Native windowing therefore does not establish Metal rendering or native AppKit widgets. Actual Apple Silicon build and interaction evidence must precede adoption.

Dependency ledger#

Every adopted dependency must record source URL, exact revision, fetched content hash, license and retained notices, runtime role, replacement seam, offline-cache location and verification result. The initial candidates are:

CandidateSource and revisionContent hashLicenseRuntime role and replacement seam
raylib-zigSource, 8758f4cd3a5ae0df6941c4715257223d34c5ad3eraylib_zig-6.0.0-KE8RECZ8BQDm-txuospkpZHbJ6DNpacUF7D88RWQ_qAeMITZig graphics bindings; platform adapter. Root manifest pin adopted in P04; P11 owns first application import.
raylibSource, tag 6.0; resolve tag to immutable commit during qualificationUpstream manifest: raylib-6.0.0-whq8uCSwLgWWeF3ec3dbG6Rr36SLFL-s2WJ1Q_2E22Bbzlib-styleWindow/input/2D/3D rendering; platform adapter
rayguiSource, 3b2855842ab578a034f827c38cf8f62c042fc983Upstream manifest: N-V-__8AAHvybwBw1kyBGn0BW_s1RqIpycNjLf_XbE-fpLUFzlib-styleInitial controls; platform adapter

The Zig global cache populated during P01 is the local development cache, not a packaging guarantee. P27 must record a reproducible cache path and prove a network-disabled build. Inventory transitively fetched packages and bundled components, including platform libraries, separately from runtime dependencies; do not activate web toolchains for a native-only target.

Ownership and replacement boundary#

All external graphics imports belong in the proposed src/visual/platform.zig. It exposes project-owned drawing, input, camera and control types; dependency types must not escape its boundary. Engine modules must not import the renderer. Application state and commands consume typed engine results, while 2D and 3D views share immutable presentation snapshots.

The graphics owner owns this adapter, resource lifetime, fonts and rendering. The application owner owns navigation, selection, forms and command state. The engine owner owns persistence and typed operations. The coordinator owns dependency pins and shared interfaces; workers must not independently upgrade or replace the stack.

Qualification, fallback and packaging#

Time-box initial qualification to one working day, including one bounded build/binding repair. Acceptance requires an actual arm64 window with editable Unicode text, clipboard and keyboard focus, selectable/zoomable 2D records, a toggleable 3D camera with picking, Retina scaling, resize handling and clean shutdown. Verify selection consistency across views, invalid-input feedback, and nonblocking interaction during a fixture operation. Explicitly assess input-method and accessibility limitations before claiming a complete desktop editing experience.

Qualify the intended packaged font, including Croatian characters, rather than relying on an example font. Record its license, glyph coverage and rendering at Retina scale; test it from another working directory. P09 supplies bounded input/frame timing telemetry through project-owned interfaces so P26 can measure responsiveness without importing graphics dependencies or changing renderer ownership.

P01 records its exact toolchain, SDK, dependency resolution and actual window launch procedure, including launch outside the spike directory. Its fixture is a graphics qualification, not database proof. P11 proves durable record save/reopen through the actual service. P27 delivers the final package/run commands, populated-cache offline build and outside-checkout launch with a new isolated profile. Clean-machine certification without the documented prerequisites remains later; it must not become an implicit blocker for the local prototype.

If the bounded raylib gate fails, the coordinator may qualify sokol-zig, whose documentation reports Zig 0.16+ and a default macOS Metal backend. First establish a new exact revision/content-hash contract and equivalent runtime evidence. Its lower-level graphics/shader integration adds application UI work; it is a fallback, not a parallel renderer implementation. Do not silently downgrade Zig.

Prefer static library integration and procedural geometry. Embed small assets or package them explicitly in the app's resources directory without depending on the current working directory. Retain the MIT binding notice, raylib notice, raygui notice, and separately inventoried font/component licenses. Distribution signing and notarization require their own verified release gate.

Embedded native text atlas#

The native client embeds the previously qualified Noto Sans asset, SHA-256 bfb7bb691513f12e734dc346c03a03f784912432d7e3fa8e56efcf906fe86b3d, under SIL OFL 1.1. Source, notices and coverage: native font. The font is independent of cwd; one window owns the atlas. Existing raylib revision is unchanged; its supported build configuration disables SUPPORT_SCREEN_CAPTURE to prevent implicit F12 disk exports.

Independent MCP qualification client#

Development-only interoperability uses the official Python mcp==1.30.0 SDK (MIT), from PyPI, wheel SHA-256 666edb5009503e1047c9d60346a756f94b261f05cc2625f23d41c728ffc484d0. It is installed in an isolated temporary environment, not linked or bundled with RURAL. Resolved transitive versions, package provenance and actual outcomes are retained in PROJECT-INTERNAL/ANALYSIS/mcp-service-2026-09-21/sdk/. No model call or application-data egress is part of this test. The runtime protocol stays pinned to 2025-11-25.

Standalone notice and rebuild contract#

The pinned binding archive excludes its LICENSE. The retained MIT notice was retrieved from that exact revision, SHA-256 37ba04d7eaeadc1bb200d9389b86c37c6dacf4407ee376350442dac66cdcc0dd. The packager includes it alongside raylib/raygui notices and the complete bounded raylib external-component tree, preserving embedded licenses without asserting every optional component is linked.

Runtime executables need no dependency download. Offline source rebuilding requires the documented Zig 0.16.0 installation, Apple SDK and populated global dependency cache; these are not redistributed. The qualification record distinguishes preparation, executed checks and outstanding acceptance. Package generation neither resolves new pins nor fetches missing prerequisites.