Summary
Goal: a plain front-end QCObjects app — the kind demonstrated across the QCObjects-Labs labs — should run unmodified on the latest release line (2.5.x). Today it only works on the 2.4 line (qcobjects@2.4.99 + qcobjects-sdk@2.4.66); the latest version fails at load time, at type-check time, and at scaffold time. This issue consolidates the lab findings (with working references) and drives the remaining blockers to closure so the latest version is actually usable.
Lab references (verified ground truth)
These were built and verified end-to-end (headless Chromium + framework debug logger) during the QCObjects discovery labs:
- Working 2.4-line demo app — https://github.com/QCObjects-Labs/qcobjects-web
A from-scratch app with a modern class-based component using the external
.tpl.html template mechanism (smart widget → generic <quick-component> →
XHR fetch of templates/components/*.tpl.html → native shadow root).
- Hello-world with vendored browser bundles — https://github.com/QCObjects-Labs/hello-qcobjects
Demonstrates that even the 2.4 browser bundles lazily require Node core
built-ins (node:process, node:fs, node:path, node:url) and need a
benign window.require stub to load — which the latest line must eliminate.
- Lab findings & tooling write-up — https://github.com/QCObjects-Labs/labs-docs
FINDINGS.md documents the load mechanism, componentClass resolution,
nested components, and debugging; APPENDIX-TOOLING.md documents the
verification setup.
- Agent skill — https://github.com/qcobjects-skills/scaffolding
The distilled, installable recipe (npx skills add qcobjects-skills/scaffolding).
Current blockers on latest (2.5.x)
Acceptance criteria for "fully working app on the latest version"
npm install qcobjects@latest (stable tag) + a plain esbuild/Vite ESM app:
import * as QCObjects from "qcobjects" initializes with no shims —
no window.require, no Node built-in stubs.
- A classic
<script> pointing at a shipped browser build defines the global
API (CONFIG, Class, New, Component, Package, …) as documented.
npx tsc --noEmit on a TS app importing qcobjects passes (no TS2305).
- The external
.tpl.html mechanism behaves identically to the 2.4-line
reference (qcobjects-web): widget → generic component → XHR → shadow-root
render, verified via window.logger.debugEnabled = true.
- No Node core module (
node:fs, node:process, node:path, node:url) is
required or loaded in any browser execution path.
- The lab's 2.4-line apps upgrade to latest with zero code changes other
than the dependency version bump.
Suggested work items
Related
Summary
Goal: a plain front-end QCObjects app — the kind demonstrated across the QCObjects-Labs labs — should run unmodified on the latest release line (2.5.x). Today it only works on the 2.4 line (
qcobjects@2.4.99+qcobjects-sdk@2.4.66); the latest version fails at load time, at type-check time, and at scaffold time. This issue consolidates the lab findings (with working references) and drives the remaining blockers to closure so the latest version is actually usable.Lab references (verified ground truth)
These were built and verified end-to-end (headless Chromium + framework debug logger) during the QCObjects discovery labs:
A from-scratch app with a modern class-based component using the external
.tpl.htmltemplate mechanism (smart widget → generic<quick-component>→XHR fetch of
templates/components/*.tpl.html→ native shadow root).Demonstrates that even the 2.4 browser bundles lazily
requireNode corebuilt-ins (
node:process,node:fs,node:path,node:url) and need abenign
window.requirestub to load — which the latest line must eliminate.FINDINGS.mddocuments the load mechanism,componentClassresolution,nested components, and debugging;
APPENDIX-TOOLING.mddocuments theverification setup.
The distilled, installable recipe (
npx skills add qcobjects-skills/scaffolding).Current blockers on latest (2.5.x)
shipped builds (
public/browser/QCObjects.js,build/QCObjects.js,public/esm/index.mjs) load in a plain browser, so the app does nothing.qcobjectsnpm package ships broken TypeScript declarations(TS2305 on every named export), so a TS app cannot type-check against it.
latestdist-tag is a pre-release (-beta) #107 —latestnpm dist-tag points at a-betapre-release, sonpm install qcobjectsdoes not even install a stable latest.Acceptance criteria for "fully working app on the latest version"
npm install qcobjects@latest(stable tag) + a plain esbuild/Vite ESM app:import * as QCObjects from "qcobjects"initializes with no shims —no
window.require, no Node built-in stubs.<script>pointing at a shipped browser build defines the globalAPI (
CONFIG,Class,New,Component,Package, …) as documented.npx tsc --noEmiton a TS app importingqcobjectspasses (no TS2305)..tpl.htmlmechanism behaves identically to the 2.4-linereference (
qcobjects-web): widget → generic component → XHR → shadow-rootrender, verified via
window.logger.debugEnabled = true.node:fs,node:process,node:path,node:url) isrequired or loaded in any browser execution path.
than the dependency version bump.
Suggested work items
<script>and via<script type="module">without Node built-ins (Shipped browser builds embed Node core built-ins (node:fs, node:process), so neither <script> nor <script type="module"> loads in a browser #118).index.d.tsdeclarations for every public export (qcobjects npm package ships broken TypeScript type declarations (TS2305 on every named export) #119).latestdist-tag to a stable (non--beta) release (latestdist-tag is a pre-release (-beta) #107).tsc --noEmit) in CI..tpl.htmlcomponent.qcobjects-web,hello-qcobjects) as CI fixtures so regressions are caught against real-world usage.Related
latestdist-tag is a pre-release (-beta) #107