Portable documentation sites implementation plan

Copy Markdown View Source

The code implements DSH.01 and the portable artifact contract. Completion uses automated contract, regression, browser and extracted-package checks. Human verification and consumer deployment qualification are not gates for these two libraries.

PackageStatusRequiresDeliverableAcceptance
DSH-P01implemented; automated evidence belowExisting doc-shell/v2 readerAdditive collection.json, DocShell.Generate.Collection and collection descriptorDSH-V01/V02 plus collection integrity requirements below; no network or process startup
DSH-P02implemented; automated evidence belowDSH-P01DocShell.Generate.Cohort, canonical payload digest, normalized source provenanceDSH-V03; digest excludes time, random IDs, and absolute workspace paths
DSH-P03implemented; automated evidence belowDSH-P01/P02Site, Page, navigation/link types and SiteSource validationDSH-V04–V06; all public structs/functions documented and typed
DSH-P04implemented; automated evidence belowDSH-P03Heading/anchor, reading-order, locale/audience/version, canonical/source/edit and redirect projectionDSH-V04–V06 with property tests for route and anchor normalization
DSH-P05implemented; automated evidence belowDSH-P03/P04Section-aware search records, built-in deterministic JSON adapter and adapter behaviourDSH-V07; fixed query corpus and browser-neutral output
DSH-P06implemented; automated evidence belowDSH-P03–P05Renderer behaviour, normalized capability/requirement/context/asset contracts, reserved feature IDs and shared fallback/enhanced/connected conformance fixturesDSH-V09/V10; fixtures published with the package for independent renderers
DSH-P07implemented; automated evidence belowDSH-P02–P06Atomic static exporter, site manifest, sitemap, robots and llms outputsDSH-V08; clean build, rollback, subpath and output-bound evidence
DSH-P08implemented; automated evidence belowDSH-P06/P07Hosted/static semantic parity and live-capability degradation toolDSH-V11: independently observed Svelte, static HEEx and hosted LiveView surfaces agree
DSH-P09implemented; automated evidence belowDSH-P01–P08Documentation, Livebooks, benchmarks, compatibility and packaged-consumer qualificationDSH-V12 and the core release evidence recorded below; additions require DSH-P17
DSH-P10implemented; automated evidence belowDSH-P03/P06Preserve the hosted graph/source-cohort boundary and validate a host publication/OpenAPI pair before renderer invocationDSH-V13; hosted projection needs no synthetic per-repository collection; cross-surface and mixed-generation pairs fail
DSH-P11implemented; automated evidence belowDSH-P03/P06/P07Freeze portable artifact block/profile/receipt schemas and v2 state-specific capability fixturesPackaged schemas and independent canonical chart/drawing vectors; runtime byte/reference checks and external producer/reader evidence remain separate
DSH-P12implemented; automated evidence belowDSH-P11Add explicit per-call profile adapters, block validation and requirement/admission projectionChart/drawing fixtures, runtime selection, callback containment, concurrent isolation and three-seed model checks pass
DSH-P13implemented; automated evidence belowDSH-P12/P07Join verified local variants, search/text fallback and atomic exportSelected closure, original-byte checks, prior-tree preservation, emitted-script refusal and root/subpath file export tests pass
DSH-P14implemented; automated evidence belowDSH-P13; independent renderer consumersQualify document previews, renderer/native semantic parity and fresh package consumersSynthetic profile archive/static/browser joins pass; producer/native deployment validation stays consumer-owned
DSH-P15implemented; automated evidence belowDSH-P03/P06/P07Define additive inert presentation settings and propagate validated choices through hosted/static renderer contextDefaults and legacy fixtures unchanged; invalid links/settings refuse; hosts own brand, labels, locale/release destinations and robots policy
DSH-P16implemented; automated evidence belowDSH-P04/P15Complete locale/audience/section reading-flow boundaries and validate navigation/page presentation metadataAutomatic flow stays within its declared view; explicit host relationships remain possible; badges, collapse defaults, hero/banner and metadata have valid/refusal fixtures
DSH-P17implemented; automated evidence belowDSH-P08/P10–P16 and the selected renderer packagesQualify the coordinated source/package/runtime cohort and reconcile documentationFull gates, runtime matrix, notebooks, consumers, relevant benchmarks and immutable renderer evidence; external target checks retain their own status
---------

| Package contents | Site contracts, conformance fixture, specification, plan, notebooks and benchmark reports are present | | --- | --- | --- |

Coordinated completion

Shared shapes land in DocShell before renderer adoption in Phoenix Assets. The library owners retain the dependency order below. Source selection, authorization, branding content, native applications and producer algorithms remain consumer-owned. No product-specific runtime feature to relocate was found in the reviewed core/renderer paths.

StepWork and ownerTracker and required acceptance
1Reconcile each requirement with source, regressions and retained evidence in both repositoriesDSH-S01–S11/DSH-V01–V13, PHA-S01–S11/PHA-V01–V13 and DSH-A01–A10/DSH-A-V01–V10 each need a named owner and evidence; no completion from a version string or passing subset
2Define shared presentation inputs upstream, then adopt them in Phoenix AssetsDSH-P15; PHA-P11. Optional validated brand/footer data, labels, locale/release destinations and metadata; no host policy, framework snippets or executable callbacks in portable data
3Implement hosted presentation/OpenAPI pair validation upstream and consume it before renderingDSH-P10; PHA-P13. Matching immutable publication/source-view/graph-position/locale/release/disclosure bindings pass; absent, stale, mixed and cross-surface pairs refuse
4Complete site projection and navigation behavior upstreamDSH-P16; PHA-P12. Locale/audience/section flow, explicit relationships, badge/collapse metadata, hero/banner and deterministic valid/malformed fixtures
5Freeze and package the generic portable-artifact contracts upstreamDSH-P11. Block/profile/capability/receipt/manifest schema fixtures, version compatibility, exact/one-over limits and producer-owned schema boundaries
6Complete artifact profile validation, admission and atomic export upstreamDSH-P12/P13. Original bytes/digests/lengths/bindings, runtime selection, callback faults, concurrent isolation, selected closure, script-free output and preservation of the prior tree
7Complete ordinary Svelte, HEEx and static rendering in Phoenix AssetsPHA-P11/P12. Selectors, host customization, translated control labels, navigation metadata, splash/hero/banner and SEO metadata; ordinary links and no-JavaScript content remain usable
8Render verified artifact selections and supply a diagnostic preview in Phoenix AssetsPHA-P14; DSH-P14 supplies the generic inputs/observations. Show selected media, identities, captions, descriptions, anchors, limitations and complete fallback without producer-specific branches
9Extend browser/accessibility evidence in Phoenix AssetsPHA-P15; DSH-P14. Keyboard/focus, search, navigation, selectors, themes/contrast, RTL, zoom/reflow, print, offline/file/subpath and failed-enhancement cases; consumer deployment stays separate
10Close independent renderer conformance against one expanded upstream corpusDSH-P08; PHA-P10/P16. Svelte, static HEEx and hosted LiveView agree on admitted content, routes, names, headings, digests and unavailable live capabilities
11Qualify fresh packages together without weakening compatibilityDSH-P17; PHA-P16. Both full gates, required runtimes, optional/minimum/unlocked consumers, notebooks, relevant benchmarks, local asset budgets, reviewed screenshots and new exact-archive receipts
12Reconcile docs, trackers and CI with the delivered behaviorDSH-P09/P17; both repositories' owning guidance. Record exact revisions/results/skips; investigate the Phoenix Assets Codecov upload failure; new local commits need another maintainer push for remote CI

Portable artifact delivery

Both frozen producer profiles traverse the same generic projection/export path. Descriptors, manifests, original media, receipts and source anchors are bounded and checked. Unsupported essential content, stale identities, unadvertised media or subject kinds, callback faults and unsafe output refuse. Failed publication preserves the prior complete tree. The renderer consumes admitted selections without fetching producer data or negotiating a replacement state.

Requirement evidence map

The following locators distinguish core behavior from independent renderer and external target obligations. Test files live under test/doc_shell/ unless otherwise qualified; package consumers and notebooks are separate executions.

RequirementOwner and executable evidenceRemaining boundary
DSH-S01 / DSH-V01Generate.Collection/Cohort; collection integrity/import tests and colliding independent corporaFresh core consumer proves the extracted package closure
DSH-S02 / DSH-V02Collection input/limits and site projection/validation; malformed, mixed, missing, symlink, path and legacy refusal suitesNo network retrieval or source discovery is added
DSH-S03 / DSH-V03Cohort/canonical JSON and SiteProjector; reorder/determinism properties, metadata/flow regressions and stable output manifestsHost settings do not become source or access authority
DSH-V04presentation/site_projector_test.exs, route/anchor/navigation and static export testsReader output must preserve the admitted targets
DSH-V05Source/site visibility matrix, settings and reading-flow testsHosts supply the admitted source view
DSH-V06Heading/link/flow projection, page decorations and export link validationRoot/subpath/file reader observations live downstream
DSH-S04 / DSH-V07Section-aware search records and SearchAdapter.JSON; source/filter tests plus downstream JSON/Pagefind comparisonsBrowser loading and keyboard UI belong downstream
DSH-S05Renderer capabilities/requirements and artifact v2 admission; normalized states/runtime and unknown-feature testsDeclarations alone do not prove renderer behavior
DSH-S06 / DSH-V08StaticExporter, file/asset closure and atomic publication tests; artifact export rollback and URL testsExtracted producer/renderer archives must be joined again
DSH-S07Static output/link/redirect/limit validators and exact/one-over corpus testsProducer semantics and media-specific checks remain producer/renderer-owned
DSH-S08 / DSH-V09Packaged site/hosted-pair/artifact schemas and corpora; conformance, capability, settings and decoration testsAccessibility/paint observations come from real readers
DSH-S09 / DSH-V11Conformance surface comparator; downstream independent Svelte, static HEEx and hosted LiveView qualificationCore fixtures alone cannot close independent reader proof
DSH-V10Native JSON/depth/value bounds, AST/URL validation, artifact preflight and downstream closed HTML/media testsCore does not execute or sanitize producer geometry
DSH-S10 / DSH-V12Legacy contract fixtures, no-optional compilation, Hex metadata and isolated core consumerNo Phoenix/LiveView/Node/Svelte/browser dependency is required by core
DSH-S11 / DSH-V13HostedPair; immutable binding, missing/stale/cross-surface/graph/locale/release tests and JSON propertiesSource authentication, session and disclosure stay host-owned
DSH-A01ArtifactBlock envelope/anchors/fallback identity; block, receipt and limit testsSource anchors are textual IDs; complete fallback stays readable
DSH-A02Explicit per-call ArtifactProfile, descriptor/schema binding and callback containment testsNo producer import, global registry, fetch or process startup
DSH-A03Two independently shaped frozen producer profiles and structural schema testsActual external producers require their own installed evidence
DSH-A04ArtifactAdmission v2 capability/variant/runtime records and validation testsA renderer must implement the selected state
DSH-A05Deterministic preference selection, runtime-set order regression and three-seed independent-model checksNo renderer renegotiation after receipt admission
DSH-A06Canonical page/manifest/profile/fallback/receipt identities, frozen byte vectors and callback-free verification testsDescriptor-set/source authenticity remains the host's prerequisite
DSH-A07Original asset length/hash/path checks, selected closure and exporter tests; downstream shared passive media vectorsProducer meaning and actual paint remain separate evidence
DSH-A08Preflight-before-callback, callback faults, batch bounds, limits and prior-tree preservation testsFailures never authorize a partial replacement
DSH-A09Unchanged legacy corpora, optional omission and explicit new API refusal in older consumersNew capabilities cannot be claimed through a legacy success path
DSH-A10Frozen renderer-neutral input/observations and downstream same-receipt preview/export checksCore contains no visual UI or approval workflow
DSH-A-V01Frozen chart/drawing profiles traverse the same generic core and downstream readersSynthetic fixtures do not establish actual producer meaning
DSH-A-V02Unknown optional/essential profiles, descriptor schema drift, duplicate profile and receipt testsHonest unavailable fallback is retained
DSH-A-V03Manifest/asset/anchor/locale/fallback tampering and atomic rollback regressionsOriginal bytes, not reserialized equivalents, are the subject
DSH-A-V04Mixed static/JS/live choices, runtime ordering, emitted-script MIME aliases and static-live refusalActual no-JavaScript behavior is observed downstream
DSH-A-V05Concurrent calls with different profiles/runtime policy and passive package/consumer loadingNative application lifecycle is external
DSH-A-V06Core bindings/units/warnings/locale/limitations and two independent HTML reader observationsIndependent Elixir/TypeScript semantics are tested; native applications stay consumer-owned
DSH-A-V07Generic bounds/path/case/byte tests and downstream SVG/PNG refusal corpus before outputProducer-specific format/geometry assertions remain outside core
DSH-A-V08Downstream same-receipt SSR/HEEx preview, print and offline file tasksFresh archive identities and reviewed screenshots are required
DSH-A-V09Legacy collection/site/v1 capability tests and explicit unsupported receipt API behaviorOld fixtures are not rewritten into new success
DSH-A-V10artifact_block_test.exs: seeds 7/29/83, 100 cases each against an independent selection modelSuccessful source cases are distinct from target observations

Executed automated evidence

  • DocShell full gate: 441 checks (16 doctests, 35 properties, 390 tests), 95.6% line coverage; compiler, optional-free compile, strict lint, docs/spec coverage, audits and Dialyzer pass on Elixir 1.20.4/OTP 29.0.4.
  • Phoenix Assets full gate: 507 backend checks at 87.6% coverage. The full gate against the current sibling passes 514 checks at 92.5%. Both pass 557 frontend tests (324 DocShell), all 25 required checks, frontend coverage floors, 17 release-script tests and packaged optional consumers.
  • New regressions first failed on undeclared profile media/subject acceptance, a hidden nested receipt requirement and duplicate shell/source IDs. Corrected owners pass; Chromium also reproduces duplicate IDs against the previous archives.
  • Earlier coordinated archives passed 166 baseline and 152 expanded reader cases, with 158 reviewed screenshots. Fresh evidence for the current source belongs to its own archive receipt; old receipts are not relabelled.
  • Five checkout notebooks executed 64 cells; six benchmark reports identify their source/runtime cohort. These records do not claim fresh Livebook installation of unreleased APIs or a performance guarantee.

Package and CI evidence

phoenix-assets/dist/release/spec-completion/qualification.json and doc-shell-cohort/coordinated-proof.json in that directory are local lookup paths for the current archived cohort. Verify those content-addressed receipts against their source revisions, locks, package hashes and browser output. Generated release artifacts remain ignored by Git. Registry publication is verified against the release tag and archive checksum.

The maintainer's pushed revisions passed Phoenix Assets 41008416945 (fc6e8f2) and DocShell 41008380235 (64e92b1), including DocShell's Elixir 1.20/OTP 28 and 29 lanes. That Phoenix Assets run used the older candidate pin. CI now selects the current upstream implementation, runs the full gate on main pushes and has a regression that prevents silent receipt-API omission. New local commits need another maintainer push for CI. Codecov uploads reported Repository not found; the workflow tolerates that optional service failure. Coverage floors are enforced by the passing local gates.

Ownership and history

AshOaskit 0.4.5 remains the released adapter baseline in DocShell's development/ test lock; core users do not acquire it. Phoenix Assets has no direct dependency on the adapter. PHA.03 admits no shared extension without its separate build-only reuse evidence; it is not a source implementation prerequisite.

Earlier measurements, exact archive/fixture hashes and intermediate failures remain in the prior committed record and retained archive receipts. The current table and automated evidence above define this tracker; historical pending prose does not override them.