Repository navigation
Portable contribution proof #15
Description
Bounded prototype accepted, 2026-10-04
cc872a2 closes the implementation gaps in the bounded inspector experiment. Native Devframe/DevTools and Chrome/Firefox execute the same contracts/actions/JSON view, including replacement rendering, mixed-provider selection, actual response/marker effects, failures/recovery, production watch/preview and caller-disconnect behavior. Five new issue-scoped commits add actual packed native and extension consumption, the optional CDB disabled profile, extension failure recovery and development source-edit proof.
The detailed closeout records exact commands, versions, outcomes, DOR/DONE and proof limits. Every prototype API/hook has a concrete example/test entry. Local evidence validates 105 references across 60 files and 584 distinct referenced checks; broader SDK inventory remains 814 paths, 460 linked paths and 38 groups with gaps. Final full CI passes. Its downloaded artifacts independently verify all 584 referenced browser checks and 362 linked unit-test references.
The owner accepted the bounded experiment on 2026-10-04 after its walkthrough and live Devframe/DevTools demos, and authorized continued implementation. No prototype contract revision was requested. This closes the bounded proof; broader host/surface/lifecycle and release cells remain in their owning contracts.
Part of Design a portable contribution SDK and WebExtension runtime.
Upstream integration boundary, 2026-09-27
The proof composes the existing declarations, native hosts, renderer and adapters. It must not introduce a showcase-only startHost abstraction or a second set of contribution APIs. Different native bootstrap code is expected; shared UI/contracts are the portability proof.
See the implementation and map review. This narrows implementation mechanisms without dropping the accepted feature or real-host coverage requirements.
Question
Can one contribution, authored with the existing JSON rendering format, run through Devframe, Devtools, Chrome extension, and Firefox extension hosts while preserving the selected operation, state, injection, and reload contracts?
Choose and run a bounded prototype that answers this question with executable examples. The result must expose an abstraction failure early enough to change the design before the framework's public API hardens.
Context and current behavior
The destination is a generic framework built in the devkit-extension pnpm/Turbo monorepo. Contributions are build-time npm packages and may contain UI only, actions only, transforms only, realm implementations, or any composition. The default renderer reuses existing JSON authoring and can be replaced by a renderer built with another framework.
The same feature must have host implementations that report their capabilities honestly. Raw APIs stay local behind typed contexts, with realm, execution context, and UI surface modeled separately. Optional CDB support means a working adapter when enabled, not an unused interface reserved for future work.
This experiment tests whether one feature works without hidden host dependencies. Its success does not certify future SDK features; the complete matrix remains a release requirement.
Requirements and scope
Use a generic "response inspector" contribution. Its UI shows a selected target, provider availability, one shared configuration value, the latest inspection result, and action outcomes. It can read a fixture response, request a deterministic modification where supported, install a page-side marker, and reset its state. The fixture application must be owned by the repository and serve predictable HTML and HTTP responses.
Package the authored JSON UI independently from implementations. Reuse that same authored UI through all selected hosts and a replacement renderer. Include small standalone examples for UI-only, action-only, transform-only, and realm-implementation contributions so composition does not become a mandatory all-in-one package shape.
The experiment must exercise development HMR, watch-build reload, and live preview with visible retention behavior. Demonstrate provider selection, unavailable operations, and failures. Every public prototype API and hook needs runnable examples under Examples and API coverage contract.
Options and recommendation
A static JSON preview verifies rendering but leaves transport and lifecycle assumptions untouched. A Chrome-only demonstration verifies one extension path while concealing browser-specific behavior. Building the complete framework first would postpone the most expensive design feedback.
Recommend one narrow feature running end to end across every selected host. Use a deterministic repository fixture instead of a third-party site. Keep real browser execution in the experiment. A fake transport is useful for focused failure tests but cannot establish Chrome or Firefox compatibility.
Run the optional CDB adapter as an explicitly enabled profile against its actual integration. Its absence must produce the documented optional-capability result in the default profile. If any required behavior cannot be supplied on a host, revise the contract or record the supported alternative with the human before declaring the experiment successful.
Proposed API or experiment
Illustrative pseudocode showing the intended separation:
export const inspectorPlugin = definePlugin({
id: 'example:response-inspector',
views: [inspectorJsonView],
actions: [inspectResponseAction, updateConfigurationAction],
transforms: [fixtureResponseTransform],
});
const provider = await createDevframeProvider({
context: actualHubContext,
providerId: 'example:server',
plugins: [inspectorPlugin],
});
// Native host creation/mounting stays native. Its shutdown awaits provider.dispose().definePlugin and createDevframeProvider are maintained exports with the shown single-object provider input. Shared registration is now implemented through defineView, defineScript and defineTransform, each taking { id, execution, requires?, setup } and the existing typed capability/native context and cleanup scope. The accepted transform contract and current evidence supersede the former unsupported-envelope checkpoint. The response-inspector composition is now implemented in the linked executable slice. Its bounded owned endpoint, all four host implementations, both renderers, recipient selection and selected packed-consumer checks have live evidence. The broader SDK matrix remains unfinished. Extension hosts install the same plugin through their own native integration. Host launchers may differ, but authored UI and action identifiers remain shared. Handlers receive typed local contexts; RPC payloads contain validated portable data.
Provide documented pnpm commands for the fixture application, contribution package, renderer preview, Devframe host, Devtools host, Chrome extension host, Firefox extension host, and optional CDB profile. Each command must start an observable example, or explain its prerequisite and start command. Include a reproducible browser interaction sequence and save the resulting test evidence.
Use package filters locally and CI for the full matrix. Record versions and build mode to distinguish development-preview evidence from packaged-extension evidence.
Scenarios and acceptance criteria
- The unchanged JSON view displays state and invokes an action through Devframe, Devtools, Chrome, and Firefox hosts.
- A second renderer consumes the same authored view and preserves action and state behavior.
- UI-only, action-only, transform-only, and realm-implementation examples initialize independently and dispose cleanly.
- The page marker appears at the promised timing boundary. The fixture verifies actual response bytes or DOM effects according to the selected injection contract.
- Unsupported transform behavior remains visible and follows the agreed fallback policy without silently pretending to modify a response.
- Provider selection changes the action destination. A failed provider yields a provider-specific error without corrupting sibling state.
- Development edits and packaged watch-build changes trigger the documented layer's reload and retain exactly the declared state.
- Tests exercise cancellation or disconnection during a call, malformed state, denied permissions, and teardown with active subscriptions.
- The real optional CDB adapter completes its enabled-profile example and has an expected disabled-profile outcome.
All prototype public APIs, hooks, and features must have matrix entries, runnable examples, and tests for their supported hosts and expected unsupported/failure paths.
Dependencies
Injection and transform contract, Renderer and surface contract, Live preview and reload contract, and Examples and API coverage contract block this experiment. They define what counts as success and which evidence must be produced. Consume the chosen contribution, routing, and state contracts; report contradictions as decision findings rather than repairing their policy silently.
Definition of Ready
-
All fixture APIs resolve to maintained exports or explicitly named unresolved domain contracts.
-
Blocking contracts specify observable behavior and testable host support.
-
The generic fixture and bounded response-inspector behavior are agreed.
-
Browser runners and optional CDB prerequisites are available or explicitly identified as blockers.
Definition of Done
-
The proof uses packed public packages and the same contribution/JSON spec across native and extension hosts without private imports or a new orchestration framework.
-
Runnable artifacts and exact commands are linked with recorded versions and outcomes.
-
Every prototype API and hook has a complete example/test/host matrix entry.
-
Real Chrome and Firefox runs verify supported paths and expected failures.
-
The human reviews the experiment, and any contract revisions are recorded in their owning decisions.
Resolution record
Technical evidence is recorded in the closeout. Final CI passes and its evidence is independently verified. The owner accepted the bounded experiment on 2026-10-04. 75491b0 records that review without changing implementation or contracts. Unexercised cells are explicitly named; prototype completion does not replace the full SDK release gates.
Activity
dvcolomban commentedon Sep 22, 2026
Research handoff and acceptance gates
Sources: Toolchain and reload audit.
Accountable owner:
dvcol, until reassigned. These observations inform this open contract; they do not resolve it.WXT is a conditional packaging candidate. Both WXT and a small custom Vite host executed a shared action/state/content fixture on stable Chromium and Firefox. The fixture did not implement the portable SDK or mount the reference renderer.
Before adopting WXT in this proof, make the retained declaration minimum pass with full library checking and settle the reload integration required by the approved contract. Do not turn the experiment's WXT-only
skipLibCheckworkaround into a portable-package setting. The custom Vite candidate is a viable fallback, with explicit ownership of missing extension/content reload machinery.The proof must exercise the approved contribution and real renderer through valid public host contexts across both server hosts and both browsers. Keep fresh-generation, lifecycle and unavailable-path assertions from the research handoffs.
dvcolomban commentedon Oct 3, 2026
Implementation claim and bounded composition, 2026-10-03
This proof remains open for a concrete missing application. The maintained counter, renderer, native script/response-filter and debugger receipts prove its ingredients, but none is the independently authored response inspector required here. Packed cross-host consumption and human review also remain unfinished. The open status of other broad tickets is not the sole reason for this status.
The native APIs needed to begin are available. I have claimed the ticket and started the smallest shared authoring module, native JSON publication and host implementations. These are example contributions using maintained exports; no SDK contract or host-launcher abstraction is being introduced.
The proposed composition uses one shared inspector capability and four actions: read the owned response, change its deterministic modification configuration, install a marker for future documents, and reset owned configuration/results/future marker registration. Provider business state stays native and separate. The authored JSON view displays selected response URL, configuration, modification availability/reason, latest status/body, marker installation and action outcome.
The fixed repository endpoint is
/inspector-response, with original textfixture:originaland supported modified textnative:fixture:original. Extension resource selection belongs to its service and requires one owned fixture tab. Native failures remain rejected operations. Reset affects future owned resources and state; it does not roll back old documents. Ordinary Chromium filtering remains explicitly unavailable; the optional CDB profile is still a separate acceptance item.Native Vite preview serves built HTML and cannot install a new HTML marker through
transformIndexHtmlafter the build. That operation will reject clearly in preview while response inspection/configuration remain available. No replacement HTML-transform pipeline is planned.Definition of Ready for the first slice:
Definition of Done remains pending: shared JSON/action/state across all four real hosts and a replacement renderer; marker/response bytes; provider selection/failure isolation; documented reload/retention; optional CDB enabled/disabled; packed public consumption; exact bounded matrix; and human review. The first authoring/host files are not evidence that this full proof is complete.
feat(example): compose response inspector across native hosts (#15)
dvcolomban commentedon Oct 3, 2026
Shared inspector composition delivered
a589b0a composes one shared capability, four action contracts and one authored native JSON spec through genuine Devframe, DevTools, Chromium and Firefox hosts. It adds no SDK API or orchestration layer.
The implementation record contains the ownership diagram, exact public calls, commands and limitations. Native Vite middleware owns one fixture endpoint; Firefox filters only the selected top-level fixture document's response. Chromium visibly reports filtering unavailable and rejects enabling it. No resource identity enters transport routing.
Measured results:
Definition of Ready for this slice:
Definition of Done for this slice:
The full ticket remains open. Packed consumption, this exact spec on a replacement renderer, mixed-provider inspector broadcast/partial failure, standalone Firefox server UI, inspector development/watch-build/preview retention, cancellation/disconnection races, optional CDB enabled profile and human review remain explicit acceptance work. The next independent work targets packed contracts and standalone Firefox evidence.
test(example): consume packed inspector contracts (#15)
test(example): verify inspector renderer portability (#15)
dvcolomban commentedon Oct 3, 2026
Packed contracts and renderer proof delivered
be8b0f3 extends the real tarball consumer. Strict Bundler and NodeNext consumers import the inspector public subpath, preserve boolean configure input/result inference, reject the corresponding string values, and execute all four actions plus direct capability reads through packed runtime. The browser contract graph stays limited to installed core/example contracts and Zod; host, runtime, Node and framework leakage still fails the check.
6ecd9c4 makes the existing framework-free example renderer consume the exact authored inspector. Its former colon-only action restriction and blanket callback rejection were example limitations. Public JSON core helpers now resolve portable action identifiers and execute state-setting callbacks. Mount-local outcomes survive native provider projections. No SDK API, dependency or spec transformation was added for rendering.
Implemented calls:
The updated record and commands link actual native receipts. Chromium 153.0.8010.12 passes 18 checks with zero page/console errors; Firefox 157.0/geckodriver 0.37.1 passes 20 checks with explicit visible-failure assertions and no global error-capture claim. Both cover genuine Devframe and DevTools servers, fresh same-provider peers, all five custom buttons, mount-local outcome preservation, renderer replacement/reset and clicking a disposed control without a provider effect. Existing counter-renderer regressions also pass 18 Chromium and 16 Firefox checks.
Definition of Ready:
Definition of Done for these slices:
This comment records the packed-contract/renderer checkpoint. Later native preview, mixed-provider, error/recovery and packed native-view proofs are delivered in the following #15 comment; remaining complete-host browser I/O, extension custom rendering, watched inspector builds, cancellation races, optional CDB profile and human review stay open.
5 remaining items
dvcolomban commentedon Oct 3, 2026
Native preview, mixed providers, error recovery and packed native views delivered
The shared response inspector now exercises the agreed client selection and provider ownership across actual backends. These are native compositions and tests; no SDK API, auth/serialization protocol, transport policy or host supervisor was added.
Inspection failed, preserves prior state and shows the native error. Reset and Inspect recover on the same provider, mount and document.The mixed fixtures reuse the existing private
createRemoteContexthelper and Devframe's publicinitHub, native origin options and interactive-auth tokens on real Vite servers. Hub middleware mounts through Vite's setup hook. Each connection owns its authentication and state. The mixed proof tests standalone native context composition; separate inspector page tests cover the native Vite plugin bootstrap.An all-provider configure in Chromium returns one rejected and two fulfilled outcomes. The unchanged native success callback reports dispatch completion; the outcome array and projected unavailable reason show the rejection. A routed single-provider read failure rejects instead and runs authored onError. Closing Devframe makes its outcome catalog-unknown; DevTools and the extension still complete, with no rerouting. Provider capabilities choose their own owned response endpoint/document. The transport interprets no domain or tab rule.
Commands, ownership diagram and retained raw observations describe the exact boundaries. Chromium 153.0.8010.12 captures zero unhandled page/console errors for error/recovery and zero page errors for mixed broadcast. Firefox 157.0/geckodriver 0.37.1 asserts visible errors, connection/overlay state and recovery; WebDriver Classic supplies no global browser-error capture. Receipts are retained after successful assertions and cleanup and independently compared with their generated payloads.
Definition of Ready:
Definition of Done for these slices:
The prior full CI at 8bb42de is verified green, with 471 referenced native checks across 42 files. It does not include these latest slices. Packed browser/native host I/O, extension custom rendering/error recovery, watched inspector builds/browser preview/reload, cancellation races, optional CDB profile and human review remain open. Investigation continues on extension custom rendering and the existing production/watch composition. The native debugger integration remains an optional capability.
feat(example): render inspector with shared extension renderer (#15)
feat(example): run inspector through native production preview (#15)
test(example): verify inspector after native caller disconnect (#15)
dvcolomban commentedon Oct 3, 2026
Extension renderer, watched production and native caller disconnect
Three separate reviewable commits extend the existing response-inspector proof. Shared contracts, authored JSON, native action bindings and provider-owned resource selection stay unchanged. No SDK API, transport policy or recovery supervisor was added.
Implemented native composition:
The independent commands are
inspector:build:watchandinspector:preview.inspector:dev:productionruns their pnpm regex in parallel. A direct CLI check started watcher plus preview for each native backend, observed ready status and real built HTML, then stopped the owned preview.DEVKIT_HOST=devtoolsselects DevTools; Devframe is the default. Vite owns build/watch/preview, and the existing publication helper retains the last complete generation. Existing documents do not automatically reload in production.Caller disconnection does not cancel already-dispatched native backend work or roll back state. The proof inspects actual socket/request/state observations; it does not inspect the abandoned document Promise or configure an available fallback selector. Extension and preview races remain separate cells. Renderer replacement alone does not cancel the Vite page's connection lifetime.
Built preview rejects runtime page-marker changes before state or HTML mutation. Native errors belong to the failed action, so a successful read does not clear a prior marker error. DevTools connection discovery probes the absent Devframe metadata endpoint first. Chrome retains its actual 404s and allows only that exact request/status and corresponding console message. Other browser errors fail. Firefox Classic asserts visible errors, state and connection but provides no global page/console/discovery capture.
Detailed composition, diagrams, runnable commands and raw observations contain all proof boundaries. Tested Chrome is 153.0.8010.12; Firefox is 157.0 with geckodriver 0.37.1. Generated receipts were compared byte-for-byte with retained evidence after assertions and cleanup.
Definition of Ready:
Definition of Done for these slices:
The preceding full CI at eb6fd0c is independently verified green with 494 referenced native checks. It does not include these three commits. Complete tarball/browser/native host I/O, extension native failure recovery, broader inspector development/reload and race cells, optional CDB profile and human prototype review remain open. The next tarball proof will reuse the actual native inspector feature rather than an in-memory replacement service. No new architectural choice blocks these independent slices.
test(example): run packed inspector through native browser hosts (#15)
test(example): verify default profile without debugger authority (#15)
test(example): verify native extension inspector failure recovery (#15)
test(example): verify native inspector development source recovery (#15)
test(example): consume packed inspector extension in both browsers (#15)
dvcolomban commentedon Oct 3, 2026
Bounded prototype technical closeout
The remaining inspector implementation gaps now have actual evidence. Five separate commits keep the proof reviewable and add no public SDK mechanism. The same capability, action contracts and authored JSON view remain shared; providers own native resources and renderers consume the native JSON contract.
The API/hook acceptance table links every bounded prototype use to its executed example and states its limits. Composition, ownership diagrams, exact commands and retained raw observations remain the executable reference.
Reproduce the new proofs
Build the affected dependency graph first as described in the composition document. These are scoped checks.
Use FIREFOX_BINARY when Firefox is outside driver discovery. Tested versions are Chrome 153.0.8010.12 and Firefox 157.0/geckodriver 0.37.1. All three artifact-gate branches pass; generated extension/development/error receipts match the retained JSON values after formatting and resource cleanup.
Behavior and proof boundaries
Definition of Ready
Definition of Done
The preceding corrective full CI at a7cba43 is independently verified green with 531 checks. This ticket stays open only for the required owner review of the bounded prototype. The complete SDK release obligations remain in their owning tickets. The separate manual Chrome permission files remain untouched, and two peer-lifecycle upstream drafts still await approval. The independently reproduced state-echo bug is Devframe draft 422, with reproduction steps and passing upstream CI.
44eb6db reconciles only the two maintained readout paragraphs with verified implementation CI. Scoped Oxfmt and staged checks pass; implementation code is unchanged from the green cc872a2 run.
docs(example): reconcile verified inspector prototype acceptance (#15)
docs(example): record owner acceptance of portable prototype (#15)
dvcolomban commentedon Oct 4, 2026
Resolution: bounded prototype accepted
On 2026-10-04 the owner reviewed the explanation, validation sequence and live Devframe/DevTools demos, then said "Seems good for now" and authorized continued implementation. No prototype API or ownership revision was requested.
The answer to this ticket is yes for the bounded response-inspector feature. One capability, four action contracts and one authored native JSON view run on the two native server hosts and both extension browsers, with a replaceable renderer. Clients choose recipients; providers choose their native resources and retain independent state. Native auth, RPC, state, rendering and build lifecycle remain upstream-owned.
Implementation closeout, accepted API/hook table, and walkthrough and commands hold the detailed evidence. Full implementation CI passes with independently verified 105 browser references, 60 receipt files, 584 referenced checks and 362 linked unit references. The acceptance-only commit passes scoped formatting and staged checks; it changes no runtime code.
Definition of Done is complete for this bounded experiment. Broader SDK state, authority, injection, renderer, reload, packaging and release obligations remain in their owning contracts. Chromium response filtering is explicitly unavailable in this example; native broadcast outcomes, authentication after reload and already-dispatched backend work retain the documented behavior. This acceptance does not certify all 814 public paths or erase the 38 broader gap groups.
Continue with State scope and recovery before expanding the dependent renderer and reload work. Manual Chrome permission interaction and the two unapproved peer-lifecycle drafts remain separate owner inputs; neither prevents this independent state work.