You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The demo has zero package/revision client code: no api.js functions for the existing routes, no view renders packages or issuances, no API_FEATURES flag — even though server.mjs already proxies /packages and /revisions, and the MCP chat already lists list_packages / issue_package_revision / get_revision. The campus story (Client → Project → Package → Issuance → CCD, packages as overlapping lenses like Campus Underground vs Building A Core & Shell, per-package non-linear issuance clocks) is invisible in the demo.
What (all inside examples/web_ui_demo/ — example/POC code, no src/ changes)
Packages view tab (pattern-match existing tabs): list the active project's packages with ordered member specs (GET /projects/{id}/packages); create a package; edit membership (PUT /packages/{id}/specs, reusing the board's project-member specs).
Plumbing: api.js functions for the package/revision routes; one API_FEATURES.packages flag gating the tab; README walkthrough — a scripted campus scenario (multi-building project, an underground-only package, a permit issuance, an addendum, a CCD under a bulletin).
OpenAPI ↔ MCP contract lockstep
No API change: consumes existing + this series' contracts read/write from example code only. If implementation reveals a needed contract change, STOP and file it separately with the lockstep blurb — never drift the demo from the spec.
With feat(api): list a package's revisions — GET /packages/{id}/revisions #388 live: the tab lists packages + issuance timelines; issuing a revision from the form appears in the timeline; nesting/base render when the backend supports them; compare drill-in lands in the Compare view with the right sources; demo suites stay green (node --test examples/web_ui_demo/*.test.mjs) with new pure helpers covered; README campus walkthrough reproduces end-to-end.
Why
The demo has zero package/revision client code: no api.js functions for the existing routes, no view renders packages or issuances, no
API_FEATURESflag — even thoughserver.mjsalready proxies/packagesand/revisions, and the MCP chat already listslist_packages/issue_package_revision/get_revision. The campus story (Client → Project → Package → Issuance → CCD, packages as overlapping lenses like Campus Underground vs Building A Core & Shell, per-package non-linear issuance clocks) is invisible in the demo.What (all inside
examples/web_ui_demo/— example/POC code, nosrc/changes)GET /projects/{id}/packages); create a package; edit membership (PUT /packages/{id}/specs, reusing the board's project-member specs).GET /projects/{id}/revision-nomenclature); "Issue revision" form driven by the profile's type fields (structured create body); nest children underparentRevisionIdand showbaseRevisionIdlineage when present (feat(db/api): issuance nesting — parent_revision_id on package_revisions (CCDs under issuances, ADR required) #389/feat(db/api): persist addendum comparison base — base_revision_id on package_revisions #390 — feature-detect).compare_specs-per-section orcompare_scopeswhen available (feat(reporting): frozen revision trees as comparison sources — polymorphic compare refs + freeze-time origin embedding (ADR required) #392/feat(reporting): scope rollup comparison — project↔project, package↔package, issuance↔issuance over shared sections #393 — feature-detect; degrade to today's live-spec Compare).API_FEATURES.packagesflag gating the tab; README walkthrough — a scripted campus scenario (multi-building project, an underground-only package, a permit issuance, an addendum, a CCD under a bulletin).OpenAPI ↔ MCP contract lockstep
No API change: consumes existing + this series' contracts read/write from example code only. If implementation reveals a needed contract change, STOP and file it separately with the lockstep blurb — never drift the demo from the spec.
Prior art / cross-links
POST /revisions/{id}/generateis MCP_UNEXPOSED) — the browser calls it through the proxy, agents don't.Non-goals
Acceptance
node --test examples/web_ui_demo/*.test.mjs) with new pure helpers covered; README campus walkthrough reproduces end-to-end.Hard dependency: #388. Feature-detects #389/#390/#392/#393.