@tryvitris/website-harness 0.0.0-stage → 0.1.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +7 -0
- package/LICENSE +21 -0
- package/NOTICE +17 -0
- package/README.md +141 -2
- package/agent/EVALUATION.md +23 -0
- package/agent/PROMPT.md +13 -0
- package/agent/STATE.json +109 -0
- package/agent/WORKFLOW.md +108 -0
- package/agent/evals/preview.md +5 -0
- package/agent/graph.yaml +752 -0
- package/agent/guardrails.md +10 -0
- package/agent/refs/accessibility.md +9 -0
- package/agent/refs/art-direction.md +15 -0
- package/agent/refs/brand.md +3 -0
- package/agent/refs/browser.md +15 -0
- package/agent/refs/business.md +9 -0
- package/agent/refs/components.md +42 -0
- package/agent/refs/compose.md +10 -0
- package/agent/refs/contracts.md +32 -0
- package/agent/refs/copy.md +14 -0
- package/agent/refs/counterpoint.md +3 -0
- package/agent/refs/critic.md +29 -0
- package/agent/refs/design-calibration.md +31 -0
- package/agent/refs/design-feedback.md +13 -0
- package/agent/refs/design-quality.md +33 -0
- package/agent/refs/design-synthesis.md +9 -0
- package/agent/refs/direction.md +29 -0
- package/agent/refs/feedback-fulfillment.md +7 -0
- package/agent/refs/geo.md +7 -0
- package/agent/refs/harvest.md +7 -0
- package/agent/refs/icons.md +102 -0
- package/agent/refs/images.md +3 -0
- package/agent/refs/implement.md +24 -0
- package/agent/refs/industry-reference-shortlist.md +64 -0
- package/agent/refs/inspiration.md +17 -0
- package/agent/refs/interpret.md +3 -0
- package/agent/refs/jev.md +166 -0
- package/agent/refs/launch.md +11 -0
- package/agent/refs/layout.md +7 -0
- package/agent/refs/media.md +35 -0
- package/agent/refs/motif.md +3 -0
- package/agent/refs/motion-count.md +13 -0
- package/agent/refs/motion-image.md +12 -0
- package/agent/refs/motion-numeric.md +14 -0
- package/agent/refs/motion-page.md +23 -0
- package/agent/refs/motion-process.md +12 -0
- package/agent/refs/motion-sequence.md +7 -0
- package/agent/refs/motion-text.md +12 -0
- package/agent/refs/motion.md +11 -0
- package/agent/refs/narrative.md +9 -0
- package/agent/refs/performance.md +36 -0
- package/agent/refs/preview.md +3 -0
- package/agent/refs/production-quality.md +33 -0
- package/agent/refs/psychology.md +3 -0
- package/agent/refs/refine.md +14 -0
- package/agent/refs/research.md +7 -0
- package/agent/refs/sections.md +6 -0
- package/agent/refs/seo.md +9 -0
- package/agent/refs/storyboard.md +27 -0
- package/agent/refs/template-adaptation.md +42 -0
- package/agent/refs/template-from-url.md +91 -0
- package/agent/refs/template-library.md +32 -0
- package/agent/refs/template-motion.md +44 -0
- package/agent/refs/theme-selection.md +13 -0
- package/agent/refs/ui-ux.md +7 -0
- package/agent/refs/usability.md +5 -0
- package/agent/refs/variant-directions.md +20 -0
- package/agent/refs/write.md +6 -0
- package/agent/request.json +11 -0
- package/agent/workflow.json +4 -0
- package/bin/api/agent/artifacts.js +38 -0
- package/bin/api/agent/evaluate.js +55 -0
- package/bin/api/agent/grade.js +51 -0
- package/bin/api/agent/graph.js +16 -0
- package/bin/api/cli/api.js +104 -0
- package/bin/api/cli.js +48 -0
- package/bin/api/contracts.js +22 -0
- package/bin/api/engine.js +53 -0
- package/bin/api/hosting.js +40 -0
- package/bin/api/icons.js +57 -0
- package/bin/api/index.js +20 -0
- package/bin/api/references.js +45 -0
- package/bin/api/render.js +61 -0
- package/bin/api/schema.js +68 -0
- package/bin/api/theme.js +9 -0
- package/bin/api/types.js +8 -0
- package/bin/chunks/chunk-2NW7KSPA.js +17 -0
- package/bin/chunks/chunk-34H54KEY.js +45 -0
- package/bin/chunks/chunk-3CTBXY5K.js +22313 -0
- package/bin/chunks/chunk-42IXFXUD.js +1141 -0
- package/bin/chunks/chunk-4DM5TTLG.js +219 -0
- package/bin/chunks/chunk-4GZCAWWK.js +327 -0
- package/bin/chunks/chunk-54JC5L35.js +493 -0
- package/bin/chunks/chunk-5OOPJNGN.js +511 -0
- package/bin/chunks/chunk-6A3VWYMF.js +28 -0
- package/bin/chunks/chunk-6H3T46F5.js +25 -0
- package/bin/chunks/chunk-7FS67SRF.js +12 -0
- package/bin/chunks/chunk-7VLBEAFW.js +56 -0
- package/bin/chunks/chunk-ANMJRJQ5.js +31 -0
- package/bin/chunks/chunk-AUO5I56E.js +118774 -0
- package/bin/chunks/chunk-B5I45LFD.js +619 -0
- package/bin/chunks/chunk-BBV7PMFC.js +185 -0
- package/bin/chunks/chunk-BIEDSEL2.js +8 -0
- package/bin/chunks/chunk-CBEJZO4L.js +67 -0
- package/bin/chunks/chunk-DRJQ4OOU.js +514 -0
- package/bin/chunks/chunk-DSS2U2OM.js +115 -0
- package/bin/chunks/chunk-E5Y46VBX.js +678 -0
- package/bin/chunks/chunk-FOXUQXTV.js +278 -0
- package/bin/chunks/chunk-FYN4T4SV.js +4900 -0
- package/bin/chunks/chunk-G7MNMULR.js +192 -0
- package/bin/chunks/chunk-GVNIL34R.js +78 -0
- package/bin/chunks/chunk-GZDLXYZV.js +3425 -0
- package/bin/chunks/chunk-HNORQ74T.js +40 -0
- package/bin/chunks/chunk-IKNMBGGD.js +217 -0
- package/bin/chunks/chunk-JCRGE6AL.js +14 -0
- package/bin/chunks/chunk-LKN75JGA.js +63 -0
- package/bin/chunks/chunk-M2ETYSVJ.js +176 -0
- package/bin/chunks/chunk-M4LNHYYR.js +177 -0
- package/bin/chunks/chunk-PRLL7B63.js +113 -0
- package/bin/chunks/chunk-R7YELY3C.js +923 -0
- package/bin/chunks/chunk-T6PE4KN4.js +277 -0
- package/bin/chunks/chunk-T7DGRVTP.js +458 -0
- package/bin/chunks/chunk-TY33XMHW.js +239 -0
- package/bin/chunks/chunk-VH7PM7KJ.js +179 -0
- package/bin/chunks/chunk-WEFDVXFX.js +65 -0
- package/bin/chunks/chunk-XGTHGWPW.js +90 -0
- package/bin/chunks/chunk-XL2DRAYI.js +39 -0
- package/bin/chunks/chunk-YCVGD2CG.js +2751 -0
- package/bin/chunks/chunk-YQYHROLZ.js +1023 -0
- package/bin/chunks/chunk-YYPYYOEV.js +34 -0
- package/bin/chunks/chunk-Z2UNY47A.js +2418 -0
- package/bin/chunks/design-context-store-IAT2P2OC.js +39 -0
- package/bin/chunks/packets-VBMY4SQJ.js +53 -0
- package/bin/chunks/policy-2I37JUU3.js +18 -0
- package/bin/chunks/preparation-S4MG3RPL.js +93 -0
- package/bin/chunks/questions-HKELBDFL.js +120 -0
- package/bin/chunks/state-GDL6CCJI.js +20 -0
- package/bin/chunks/template-gallery-ET76ERZQ.js +140 -0
- package/bin/cloudflare/backend.js +24421 -0
- package/bin/cloudflare/blake3.wasm +0 -0
- package/bin/cloudflare/forms-test.js +429 -0
- package/bin/cloudflare/templates.js +100 -0
- package/bin/types/scripts/lib/r2.d.ts +7 -0
- package/bin/types/scripts/onboard/browser.d.ts +9 -0
- package/bin/types/scripts/onboard/crawl.d.ts +35 -0
- package/bin/types/scripts/onboard/images.d.ts +19 -0
- package/bin/types/scripts/onboard/prompt.d.ts +10 -0
- package/bin/types/scripts/onboard/run.d.ts +47 -0
- package/bin/types/src/agent/adaptation-checkpoint.d.ts +70 -0
- package/bin/types/src/agent/added-media.d.ts +31 -0
- package/bin/types/src/agent/api-contracts.d.ts +2 -0
- package/bin/types/src/agent/art-direction-policy.d.ts +9 -0
- package/bin/types/src/agent/art-direction.d.ts +253 -0
- package/bin/types/src/agent/artifacts.d.ts +602 -0
- package/bin/types/src/agent/browser-motion-journey.d.ts +59 -0
- package/bin/types/src/agent/browser-motion.d.ts +40 -0
- package/bin/types/src/agent/browser-timeout.d.ts +4 -0
- package/bin/types/src/agent/composition-authoring.d.ts +12 -0
- package/bin/types/src/agent/composition-context.d.ts +63 -0
- package/bin/types/src/agent/composition-contract.d.ts +4 -0
- package/bin/types/src/agent/composition-decisions.d.ts +43 -0
- package/bin/types/src/agent/composition-preflight.d.ts +16 -0
- package/bin/types/src/agent/creative-change-context.d.ts +21 -0
- package/bin/types/src/agent/creative-context.d.ts +56 -0
- package/bin/types/src/agent/creative-contract.d.ts +123 -0
- package/bin/types/src/agent/creative-efficiency.d.ts +18 -0
- package/bin/types/src/agent/creative-evidence.d.ts +57 -0
- package/bin/types/src/agent/creative-objective.d.ts +33 -0
- package/bin/types/src/agent/creative-profile.d.ts +81 -0
- package/bin/types/src/agent/creative-prompts.d.ts +7 -0
- package/bin/types/src/agent/creative-render-bindings.d.ts +13 -0
- package/bin/types/src/agent/creative-revision.d.ts +33 -0
- package/bin/types/src/agent/creative-skills.d.ts +25 -0
- package/bin/types/src/agent/cursor-hook.d.ts +182 -0
- package/bin/types/src/agent/design-bundle.d.ts +24 -0
- package/bin/types/src/agent/design-calibration.d.ts +43 -0
- package/bin/types/src/agent/design-cli.d.ts +5 -0
- package/bin/types/src/agent/design-comparison.d.ts +63 -0
- package/bin/types/src/agent/design-context-packet.d.ts +82 -0
- package/bin/types/src/agent/design-context-store.d.ts +14 -0
- package/bin/types/src/agent/design-context.d.ts +85 -0
- package/bin/types/src/agent/design-contracts.d.ts +35 -0
- package/bin/types/src/agent/design-copy.d.ts +29 -0
- package/bin/types/src/agent/design-feedback.d.ts +91 -0
- package/bin/types/src/agent/design-knowledge.d.ts +124 -0
- package/bin/types/src/agent/design-quality.d.ts +143 -0
- package/bin/types/src/agent/design-review-server.d.ts +13 -0
- package/bin/types/src/agent/design-run.d.ts +174 -0
- package/bin/types/src/agent/design-synthesis.d.ts +76 -0
- package/bin/types/src/agent/design-usage.d.ts +38 -0
- package/bin/types/src/agent/editorial.d.ts +11 -0
- package/bin/types/src/agent/evaluate.d.ts +28 -0
- package/bin/types/src/agent/grade.d.ts +16 -0
- package/bin/types/src/agent/graph.d.ts +82 -0
- package/bin/types/src/agent/industry/document.d.ts +10 -0
- package/bin/types/src/agent/industry/interactions.d.ts +2 -0
- package/bin/types/src/agent/industry/markup.d.ts +14 -0
- package/bin/types/src/agent/industry/registry.d.ts +2 -0
- package/bin/types/src/agent/industry/render-style.d.ts +3 -0
- package/bin/types/src/agent/industry/ridgeline/browse.d.ts +2 -0
- package/bin/types/src/agent/industry/ridgeline/diagrams.d.ts +9 -0
- package/bin/types/src/agent/industry/ridgeline/facts.d.ts +61 -0
- package/bin/types/src/agent/industry/ridgeline/pages/company.d.ts +5 -0
- package/bin/types/src/agent/industry/ridgeline/pages/home.d.ts +1 -0
- package/bin/types/src/agent/industry/ridgeline/pages/journal.d.ts +24 -0
- package/bin/types/src/agent/industry/ridgeline/pages/services.d.ts +6 -0
- package/bin/types/src/agent/industry/ridgeline/photo.d.ts +18 -0
- package/bin/types/src/agent/industry/ridgeline/script.d.ts +1 -0
- package/bin/types/src/agent/industry/ridgeline/site.d.ts +2 -0
- package/bin/types/src/agent/industry/ridgeline/style.d.ts +1 -0
- package/bin/types/src/agent/industry/ridgeline/theme.d.ts +4 -0
- package/bin/types/src/agent/industry/seven/barber-club.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/barber-corner.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/barber-form.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/browse.d.ts +4 -0
- package/bin/types/src/agent/industry/seven/construction-built.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/construction-craft.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/construction-siteworks.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/electrical-circuit.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/electrical-light.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/electrical-power.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/hvac-climate.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/hvac-dispatch.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/hvac-seasonal.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/interactions.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/landscape-atlas.d.ts +4 -0
- package/bin/types/src/agent/industry/seven/landscape-courtyard.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/landscape-seasons.d.ts +3 -0
- package/bin/types/src/agent/industry/seven/legal-casework.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/legal-counsel.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/legal-table.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/medical-continuum.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/medical-movement.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/medical-neighborhood.d.ts +2 -0
- package/bin/types/src/agent/industry/seven/primitives.d.ts +31 -0
- package/bin/types/src/agent/industry/seven/registry.d.ts +4 -0
- package/bin/types/src/agent/industry/seven/theme.d.ts +3 -0
- package/bin/types/src/agent/industry/sites/common-ground.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/coordination.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/everyday.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/independent.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/mainstage.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/neighborhood.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/next-chapter.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/practice-notes.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/property-desk.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/residence.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/risk-office.d.ts +2 -0
- package/bin/types/src/agent/industry/sites/workshop.d.ts +2 -0
- package/bin/types/src/agent/industry/types.d.ts +48 -0
- package/bin/types/src/agent/invocation-budget.d.ts +32 -0
- package/bin/types/src/agent/jev/agent-usage.d.ts +165 -0
- package/bin/types/src/agent/jev/batching.d.ts +101 -0
- package/bin/types/src/agent/jev/block-catalog.d.ts +95 -0
- package/bin/types/src/agent/jev/bounds.d.ts +30 -0
- package/bin/types/src/agent/jev/budget.d.ts +76 -0
- package/bin/types/src/agent/jev/business-draft.d.ts +103 -0
- package/bin/types/src/agent/jev/calibration.d.ts +131 -0
- package/bin/types/src/agent/jev/client.d.ts +52 -0
- package/bin/types/src/agent/jev/component-select.d.ts +102 -0
- package/bin/types/src/agent/jev/config.d.ts +52 -0
- package/bin/types/src/agent/jev/consistency.d.ts +105 -0
- package/bin/types/src/agent/jev/content-checks.d.ts +121 -0
- package/bin/types/src/agent/jev/creative.d.ts +81 -0
- package/bin/types/src/agent/jev/critic-report.d.ts +132 -0
- package/bin/types/src/agent/jev/extraction.d.ts +84 -0
- package/bin/types/src/agent/jev/goals.d.ts +43 -0
- package/bin/types/src/agent/jev/html-tree.d.ts +28 -0
- package/bin/types/src/agent/jev/indexing.d.ts +51 -0
- package/bin/types/src/agent/jev/ledger.d.ts +154 -0
- package/bin/types/src/agent/jev/media.d.ts +62 -0
- package/bin/types/src/agent/jev/observations.d.ts +26 -0
- package/bin/types/src/agent/jev/ownership.d.ts +74 -0
- package/bin/types/src/agent/jev/packets.d.ts +124 -0
- package/bin/types/src/agent/jev/policy.d.ts +83 -0
- package/bin/types/src/agent/jev/questions.d.ts +244 -0
- package/bin/types/src/agent/jev/ranking.d.ts +129 -0
- package/bin/types/src/agent/jev/repair.d.ts +73 -0
- package/bin/types/src/agent/jev/review.d.ts +37 -0
- package/bin/types/src/agent/jev/security.d.ts +28 -0
- package/bin/types/src/agent/jev/semantic-lifecycle.d.ts +19 -0
- package/bin/types/src/agent/jev/semantic-tasks.d.ts +89 -0
- package/bin/types/src/agent/jev/service-registry.d.ts +98 -0
- package/bin/types/src/agent/jev/state.d.ts +104 -0
- package/bin/types/src/agent/jev/types.d.ts +190 -0
- package/bin/types/src/agent/jev/visible-assertions.d.ts +84 -0
- package/bin/types/src/agent/kernel-commands.d.ts +2 -0
- package/bin/types/src/agent/kit-runtime.d.ts +12 -0
- package/bin/types/src/agent/legacy-definitions/theme-art.d.ts +5 -0
- package/bin/types/src/agent/legacy-definitions/theme-commissions.d.ts +1 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-extremes.d.ts +7 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-graphic.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-reading.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-service-extremes.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-service-people.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-service-programme.d.ts +3 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-service-project.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-service-season.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions-tactile.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-compositions.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-legacy-specimens.d.ts +8 -0
- package/bin/types/src/agent/legacy-definitions/theme-library-legacy.d.ts +20 -0
- package/bin/types/src/agent/legacy-definitions/theme-library-release2.d.ts +3 -0
- package/bin/types/src/agent/legacy-definitions/theme-service-art.d.ts +7 -0
- package/bin/types/src/agent/legacy-definitions/theme-service-commissions.d.ts +1 -0
- package/bin/types/src/agent/legacy-definitions/theme-specimen-base.d.ts +1 -0
- package/bin/types/src/agent/legacy-definitions/theme-specimens.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suite-data.d.ts +25 -0
- package/bin/types/src/agent/legacy-definitions/theme-suite-style.d.ts +1 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-checkpoint.d.ts +14 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-graphic.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-information.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-local.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-material.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-practice.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites-spatial.d.ts +2 -0
- package/bin/types/src/agent/legacy-definitions/theme-suites.d.ts +3 -0
- package/bin/types/src/agent/lifecycle.d.ts +136 -0
- package/bin/types/src/agent/lighthouse-browser.d.ts +5 -0
- package/bin/types/src/agent/media-format.d.ts +5 -0
- package/bin/types/src/agent/migration-links.d.ts +4 -0
- package/bin/types/src/agent/motion-composition.d.ts +22 -0
- package/bin/types/src/agent/motion-knowledge.d.ts +3 -0
- package/bin/types/src/agent/motion-plan.d.ts +6 -0
- package/bin/types/src/agent/performance.d.ts +52 -0
- package/bin/types/src/agent/playwright-runtime.d.ts +8 -0
- package/bin/types/src/agent/preparation.d.ts +193 -0
- package/bin/types/src/agent/preview.d.ts +1 -0
- package/bin/types/src/agent/production-quality.d.ts +72 -0
- package/bin/types/src/agent/reference-contract.d.ts +3 -0
- package/bin/types/src/agent/reference-fit.d.ts +50 -0
- package/bin/types/src/agent/reference-library.d.ts +313 -0
- package/bin/types/src/agent/reference-studies.d.ts +110 -0
- package/bin/types/src/agent/refine.d.ts +348 -0
- package/bin/types/src/agent/result-manifest.d.ts +38 -0
- package/bin/types/src/agent/runner.d.ts +10 -0
- package/bin/types/src/agent/site-inputs.d.ts +26 -0
- package/bin/types/src/agent/source-manifest.d.ts +9 -0
- package/bin/types/src/agent/state-transition.d.ts +16 -0
- package/bin/types/src/agent/storyboard-media.d.ts +11 -0
- package/bin/types/src/agent/study-render.d.ts +27 -0
- package/bin/types/src/agent/template-adaptation.d.ts +69 -0
- package/bin/types/src/agent/template-motion.d.ts +59 -0
- package/bin/types/src/agent/theme-art-direction.d.ts +2 -0
- package/bin/types/src/agent/theme-art.d.ts +1 -0
- package/bin/types/src/agent/theme-assets.d.ts +36 -0
- package/bin/types/src/agent/theme-browse.d.ts +67 -0
- package/bin/types/src/agent/theme-cloud-resources.d.ts +7 -0
- package/bin/types/src/agent/theme-cloud.d.ts +41 -0
- package/bin/types/src/agent/theme-commissions.d.ts +1 -0
- package/bin/types/src/agent/theme-compositions-extremes.d.ts +1 -0
- package/bin/types/src/agent/theme-compositions.d.ts +1 -0
- package/bin/types/src/agent/theme-identity.d.ts +23 -0
- package/bin/types/src/agent/theme-layout-roles.d.ts +7 -0
- package/bin/types/src/agent/theme-legacy-specimens.d.ts +1 -0
- package/bin/types/src/agent/theme-library-legacy.d.ts +1 -0
- package/bin/types/src/agent/theme-library-release2.d.ts +1 -0
- package/bin/types/src/agent/theme-library.d.ts +60 -0
- package/bin/types/src/agent/theme-page-manifest.d.ts +26 -0
- package/bin/types/src/agent/theme-picker-model.d.ts +51 -0
- package/bin/types/src/agent/theme-picker-runtime.d.ts +1 -0
- package/bin/types/src/agent/theme-picker-selection-runtime.d.ts +1 -0
- package/bin/types/src/agent/theme-picker-shell.d.ts +7 -0
- package/bin/types/src/agent/theme-picker-styles.d.ts +1 -0
- package/bin/types/src/agent/theme-picker.d.ts +20 -0
- package/bin/types/src/agent/theme-preview.d.ts +26 -0
- package/bin/types/src/agent/theme-release2/assets.d.ts +22 -0
- package/bin/types/src/agent/theme-release2/specimens.d.ts +2 -0
- package/bin/types/src/agent/theme-release2/theme-art.d.ts +5 -0
- package/bin/types/src/agent/theme-release2/theme-compositions-extremes.d.ts +7 -0
- package/bin/types/src/agent/theme-release2/theme-compositions-graphic.d.ts +2 -0
- package/bin/types/src/agent/theme-release2/theme-compositions-reading.d.ts +2 -0
- package/bin/types/src/agent/theme-release2/theme-compositions-tactile.d.ts +2 -0
- package/bin/types/src/agent/theme-release2/theme-compositions.d.ts +3 -0
- package/bin/types/src/agent/theme-release2/theme-specimen-base.d.ts +1 -0
- package/bin/types/src/agent/theme-release3/theme-art-direction.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-art.d.ts +5 -0
- package/bin/types/src/agent/theme-release3/theme-assets.d.ts +121 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-extremes.d.ts +7 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-graphic.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-reading.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-service-extremes.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-service-people.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-service-programme.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-service-project.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-service-season.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions-tactile.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-compositions.d.ts +2 -0
- package/bin/types/src/agent/theme-release3/theme-identity.d.ts +23 -0
- package/bin/types/src/agent/theme-release3/theme-library.d.ts +4 -0
- package/bin/types/src/agent/theme-release3/theme-service-art.d.ts +7 -0
- package/bin/types/src/agent/theme-release3/theme-specimen-base.d.ts +1 -0
- package/bin/types/src/agent/theme-release3/theme-specimens.d.ts +2 -0
- package/bin/types/src/agent/theme-selection.d.ts +75 -0
- package/bin/types/src/agent/theme-service-art.d.ts +1 -0
- package/bin/types/src/agent/theme-specimen-base.d.ts +1 -0
- package/bin/types/src/agent/theme-specimens.d.ts +1 -0
- package/bin/types/src/agent/theme-suite-data.d.ts +1 -0
- package/bin/types/src/agent/theme-suite-identity.d.ts +42 -0
- package/bin/types/src/agent/theme-suite-primitives.d.ts +14 -0
- package/bin/types/src/agent/theme-suite-renderer.d.ts +8 -0
- package/bin/types/src/agent/theme-suite-style.d.ts +1 -0
- package/bin/types/src/agent/theme-suites.d.ts +1 -0
- package/bin/types/src/agent/theme-thumbnails.d.ts +8 -0
- package/bin/types/src/agent/trace.d.ts +337 -0
- package/bin/types/src/agent/workflow-config.d.ts +25 -0
- package/bin/types/src/agent/workflow.d.ts +104 -0
- package/bin/types/src/blocks/library-profile.d.ts +9 -0
- package/bin/types/src/blocks/metadata.d.ts +65 -0
- package/bin/types/src/build/index.d.ts +29 -0
- package/bin/types/src/build/responsive-media.d.ts +19 -0
- package/bin/types/src/build/serve.d.ts +4 -0
- package/bin/types/src/build/static-output.d.ts +2 -0
- package/bin/types/src/build/verified.d.ts +1 -0
- package/bin/types/src/cli/api.d.ts +17 -0
- package/bin/types/src/cli/deploy.d.ts +21 -0
- package/bin/types/src/cli/doctor.d.ts +16 -0
- package/bin/types/src/cli/events.d.ts +16 -0
- package/bin/types/src/cli/feedback.d.ts +21 -0
- package/bin/types/src/cli/forms.d.ts +16 -0
- package/bin/types/src/cli/index.d.ts +1 -0
- package/bin/types/src/cli/lifecycle.d.ts +18 -0
- package/bin/types/src/cli/preserve.d.ts +8 -0
- package/bin/types/src/cli/preview.d.ts +14 -0
- package/bin/types/src/cli/refine.d.ts +41 -0
- package/bin/types/src/cli/root.d.ts +3 -0
- package/bin/types/src/cli/run.d.ts +30 -0
- package/bin/types/src/cli/share.d.ts +17 -0
- package/bin/types/src/cli/site-create.d.ts +24 -0
- package/bin/types/src/cli/site-migrate.d.ts +11 -0
- package/bin/types/src/cli/status.d.ts +8 -0
- package/bin/types/src/cli/types.d.ts +34 -0
- package/bin/types/src/cli/upgrade.d.ts +11 -0
- package/bin/types/src/cli/verify.d.ts +17 -0
- package/bin/types/src/cli/workflow-argv.d.ts +2 -0
- package/bin/types/src/compile/flatten.d.ts +23 -0
- package/bin/types/src/compile/frontmatter.d.ts +10 -0
- package/bin/types/src/compile/icons.d.ts +2 -0
- package/bin/types/src/compile/paths.d.ts +4 -0
- package/bin/types/src/compile/primitives.d.ts +2 -0
- package/bin/types/src/compile/scroll-motion.d.ts +14 -0
- package/bin/types/src/compile/site.d.ts +40 -0
- package/bin/types/src/editing/identity.d.ts +7 -0
- package/bin/types/src/editing/manifest.d.ts +38 -0
- package/bin/types/src/engine/checks.d.ts +2 -0
- package/bin/types/src/engine/contracts.d.ts +104 -0
- package/bin/types/src/engine/impact.d.ts +3 -0
- package/bin/types/src/engine/index.d.ts +70 -0
- package/bin/types/src/engine/revision.d.ts +5 -0
- package/bin/types/src/forms/cloudflare.d.ts +24 -0
- package/bin/types/src/forms/config.d.ts +34 -0
- package/bin/types/src/forms/frontend.d.ts +9 -0
- package/bin/types/src/html.d.ts +3 -0
- package/bin/types/src/icons/catalog.d.ts +28 -0
- package/bin/types/src/icons/coverage.d.ts +12 -0
- package/bin/types/src/icons/drawing.d.ts +7 -0
- package/bin/types/src/icons/duotone.d.ts +4 -0
- package/bin/types/src/icons/index.d.ts +37 -0
- package/bin/types/src/icons/industry-refinements-v4.d.ts +4 -0
- package/bin/types/src/icons/industry-review.d.ts +11 -0
- package/bin/types/src/icons/industry.d.ts +2 -0
- package/bin/types/src/icons/refinements.d.ts +5 -0
- package/bin/types/src/icons/studio-industry-review.d.ts +9 -0
- package/bin/types/src/icons/studio-industry.d.ts +5 -0
- package/bin/types/src/icons/studio.d.ts +34 -0
- package/bin/types/src/integrations/cloudflare-pages.d.ts +10 -0
- package/bin/types/src/integrations/deployment-smoke.d.ts +11 -0
- package/bin/types/src/integrations/hosting.d.ts +33 -0
- package/bin/types/src/integrations/wrangler-command.d.ts +5 -0
- package/bin/types/src/knowledge/artifact-order.d.ts +1 -0
- package/bin/types/src/knowledge/artifact.d.ts +11 -0
- package/bin/types/src/knowledge/composition.d.ts +54 -0
- package/bin/types/src/knowledge/contracts.d.ts +111 -0
- package/bin/types/src/knowledge/explain.d.ts +6 -0
- package/bin/types/src/knowledge/pack.d.ts +32 -0
- package/bin/types/src/knowledge/selection.d.ts +18 -0
- package/bin/types/src/knowledge/site-widgets.d.ts +6 -0
- package/bin/types/src/onboard/brief.d.ts +182 -0
- package/bin/types/src/onboard/classify.d.ts +31 -0
- package/bin/types/src/onboard/crawl-order.d.ts +7 -0
- package/bin/types/src/onboard/extract.d.ts +102 -0
- package/bin/types/src/onboard/harvest-inventory.d.ts +84 -0
- package/bin/types/src/onboard/outline.d.ts +13 -0
- package/bin/types/src/onboard/quality.d.ts +6 -0
- package/bin/types/src/onboard/shortlist.d.ts +11 -0
- package/bin/types/src/onboard/social.d.ts +15 -0
- package/bin/types/src/onboard/visual-hints.d.ts +12 -0
- package/bin/types/src/preserve/build.d.ts +1 -0
- package/bin/types/src/preserve/capture.d.ts +21 -0
- package/bin/types/src/preserve/components.d.ts +10 -0
- package/bin/types/src/preserve/config.d.ts +53 -0
- package/bin/types/src/preserve/embeds.d.ts +15 -0
- package/bin/types/src/preserve/hovers.d.ts +10 -0
- package/bin/types/src/preserve/react-capabilities.d.ts +2 -0
- package/bin/types/src/preserve/runtime.d.ts +2 -0
- package/bin/types/src/preserve/source-defects.d.ts +4 -0
- package/bin/types/src/preserve/supplement.d.ts +3 -0
- package/bin/types/src/preserve/verify.d.ts +29 -0
- package/bin/types/src/render.d.ts +10 -0
- package/bin/types/src/runtime/beacon.d.ts +2 -0
- package/bin/types/src/runtime/before-after.d.ts +2 -0
- package/bin/types/src/runtime/carousel.d.ts +2 -0
- package/bin/types/src/runtime/cookie-compliance.d.ts +14 -0
- package/bin/types/src/runtime/experience.d.ts +4 -0
- package/bin/types/src/runtime/header.d.ts +2 -0
- package/bin/types/src/runtime/leads.d.ts +2 -0
- package/bin/types/src/runtime/lightbox.d.ts +2 -0
- package/bin/types/src/runtime/scroll-motion.generated.d.ts +4 -0
- package/bin/types/src/runtime/tabs.d.ts +2 -0
- package/bin/types/src/schema.d.ts +27 -0
- package/bin/types/src/stock/library.d.ts +14 -0
- package/bin/types/src/stock/search.d.ts +30 -0
- package/bin/types/src/stock/selection.d.ts +30 -0
- package/bin/types/src/stock/types.d.ts +54 -0
- package/bin/types/src/theme.d.ts +3 -0
- package/bin/types/src/types.d.ts +115 -0
- package/bin/types/src/upgrade/kit.d.ts +48 -0
- package/bin/vitris-art.js +192 -0
- package/bin/vitris-blocks.js +238 -0
- package/bin/vitris-build.js +24 -0
- package/bin/vitris-catalog.js +49 -0
- package/bin/vitris-content-coverage.js +21 -0
- package/bin/vitris-create-site.js +86 -0
- package/bin/vitris-cursor-hook.js +61 -0
- package/bin/vitris-eval.js +76 -0
- package/bin/vitris-go.js +99 -0
- package/bin/vitris-harvest.js +184 -0
- package/bin/vitris-icons.js +168 -0
- package/bin/vitris-knowledge.js +43 -0
- package/bin/vitris-launch-preflight.js +964 -0
- package/bin/vitris-media-serve.js +50 -0
- package/bin/vitris-migrate-site.js +20 -0
- package/bin/vitris-motion-view.js +80 -0
- package/bin/vitris-prepare-media.js +64 -0
- package/bin/vitris-preview.js +36 -0
- package/bin/vitris-references.js +173 -0
- package/bin/vitris-refresh.js +50 -0
- package/bin/vitris-sign-publish-bundle.js +64 -0
- package/bin/vitris-stock.js +161 -0
- package/bin/vitris-templates.js +261 -0
- package/bin/vitris-themes.js +321 -0
- package/bin/vitris-upgrade.js +50 -0
- package/bin/vitris-verify-browser.js +662 -0
- package/bin/vitris-verify-performance.js +44 -0
- package/bin/vitris.js +50 -0
- package/blocks/CONVENTIONS.md +121 -0
- package/blocks/INDEX.md +130 -0
- package/blocks/about/about-awards/README.md +36 -0
- package/blocks/about/about-awards/styles.css +13 -0
- package/blocks/about/about-awards/template.html +1 -0
- package/blocks/about/about-credentials/README.md +33 -0
- package/blocks/about/about-credentials/block.meta.json +85 -0
- package/blocks/about/about-credentials/styles.css +4 -0
- package/blocks/about/about-credentials/template.html +1 -0
- package/blocks/about/about-founder/README.md +35 -0
- package/blocks/about/about-founder/styles.css +9 -0
- package/blocks/about/about-founder/template.html +1 -0
- package/blocks/about/about-mission/README.md +31 -0
- package/blocks/about/about-mission/styles.css +5 -0
- package/blocks/about/about-mission/template.html +1 -0
- package/blocks/about/about-statement/README.md +28 -0
- package/blocks/about/about-statement/styles.css +7 -0
- package/blocks/about/about-statement/template.html +1 -0
- package/blocks/about/about-story/README.md +35 -0
- package/blocks/about/about-story/styles.css +5 -0
- package/blocks/about/about-story/template.html +1 -0
- package/blocks/about/about-timeline/README.md +33 -0
- package/blocks/about/about-timeline/styles.css +8 -0
- package/blocks/about/about-timeline/template.html +1 -0
- package/blocks/about/about-values/README.md +31 -0
- package/blocks/about/about-values/styles.css +3 -0
- package/blocks/about/about-values/template.html +1 -0
- package/blocks/blog/blog-featured/README.md +39 -0
- package/blocks/blog/blog-featured/styles.css +12 -0
- package/blocks/blog/blog-featured/template.html +1 -0
- package/blocks/blog/blog-index/README.md +34 -0
- package/blocks/blog/blog-index/styles.css +6 -0
- package/blocks/blog/blog-index/template.html +1 -0
- package/blocks/blog/blog-post-header/README.md +31 -0
- package/blocks/blog/blog-post-header/styles.css +8 -0
- package/blocks/blog/blog-post-header/template.html +1 -0
- package/blocks/contact/contact-cards/README.md +32 -0
- package/blocks/contact/contact-cards/styles.css +7 -0
- package/blocks/contact/contact-cards/template.html +1 -0
- package/blocks/contact/contact-chips/README.md +41 -0
- package/blocks/contact/contact-chips/styles.css +13 -0
- package/blocks/contact/contact-chips/template.html +1 -0
- package/blocks/contact/contact-hours/README.md +41 -0
- package/blocks/contact/contact-hours/block.meta.json +87 -0
- package/blocks/contact/contact-hours/styles.css +8 -0
- package/blocks/contact/contact-hours/template.html +1 -0
- package/blocks/contact/contact-map/README.md +39 -0
- package/blocks/contact/contact-map/styles.css +10 -0
- package/blocks/contact/contact-map/template.html +1 -0
- package/blocks/contact/contact-offices/README.md +32 -0
- package/blocks/contact/contact-offices/styles.css +8 -0
- package/blocks/contact/contact-offices/template.html +1 -0
- package/blocks/contact/contact-phone-first/README.md +33 -0
- package/blocks/contact/contact-phone-first/block.meta.json +86 -0
- package/blocks/contact/contact-phone-first/styles.css +11 -0
- package/blocks/contact/contact-phone-first/template.html +1 -0
- package/blocks/contact/contact-split/README.md +43 -0
- package/blocks/contact/contact-split/styles.css +12 -0
- package/blocks/contact/contact-split/template.html +1 -0
- package/blocks/contact/contact-visit/README.md +36 -0
- package/blocks/contact/contact-visit/block.meta.json +88 -0
- package/blocks/contact/contact-visit/styles.css +13 -0
- package/blocks/contact/contact-visit/template.html +1 -0
- package/blocks/contact/service-areas/README.md +32 -0
- package/blocks/contact/service-areas/styles.css +9 -0
- package/blocks/contact/service-areas/template.html +1 -0
- package/blocks/content/glossary/README.md +35 -0
- package/blocks/content/glossary/styles.css +6 -0
- package/blocks/content/glossary/template.html +1 -0
- package/blocks/content/list-split/README.md +33 -0
- package/blocks/content/list-split/styles.css +13 -0
- package/blocks/content/list-split/template.html +1 -0
- package/blocks/content/prose-split/README.md +32 -0
- package/blocks/content/prose-split/styles.css +12 -0
- package/blocks/content/prose-split/template.html +1 -0
- package/blocks/content/specification-ledger/README.md +32 -0
- package/blocks/content/specification-ledger/block.meta.json +85 -0
- package/blocks/content/specification-ledger/styles.css +10 -0
- package/blocks/content/specification-ledger/template.html +1 -0
- package/blocks/cta/cta-band/README.md +33 -0
- package/blocks/cta/cta-band/styles.css +11 -0
- package/blocks/cta/cta-band/template.html +1 -0
- package/blocks/cta/cta-card/README.md +35 -0
- package/blocks/cta/cta-card/styles.css +8 -0
- package/blocks/cta/cta-card/template.html +1 -0
- package/blocks/cta/cta-floating-bar/README.md +28 -0
- package/blocks/cta/cta-floating-bar/styles.css +8 -0
- package/blocks/cta/cta-floating-bar/template.html +1 -0
- package/blocks/cta/cta-inline/README.md +30 -0
- package/blocks/cta/cta-inline/styles.css +9 -0
- package/blocks/cta/cta-inline/template.html +1 -0
- package/blocks/cta/cta-newsletter/README.md +34 -0
- package/blocks/cta/cta-newsletter/styles.css +8 -0
- package/blocks/cta/cta-newsletter/template.html +1 -0
- package/blocks/cta/cta-photo-fan/README.md +36 -0
- package/blocks/cta/cta-photo-fan/styles.css +14 -0
- package/blocks/cta/cta-photo-fan/template.html +1 -0
- package/blocks/cta/cta-split/README.md +38 -0
- package/blocks/cta/cta-split/styles.css +10 -0
- package/blocks/cta/cta-split/template.html +1 -0
- package/blocks/faq/faq-accordion/README.md +36 -0
- package/blocks/faq/faq-accordion/styles.css +6 -0
- package/blocks/faq/faq-accordion/template.html +1 -0
- package/blocks/faq/faq-grouped/README.md +40 -0
- package/blocks/faq/faq-grouped/styles.css +20 -0
- package/blocks/faq/faq-grouped/template.html +1 -0
- package/blocks/faq/faq-split/README.md +37 -0
- package/blocks/faq/faq-split/styles.css +5 -0
- package/blocks/faq/faq-split/template.html +1 -0
- package/blocks/faq/faq-tabs/README.md +36 -0
- package/blocks/faq/faq-tabs/styles.css +3 -0
- package/blocks/faq/faq-tabs/template.html +1 -0
- package/blocks/feature/feature-bento/README.md +33 -0
- package/blocks/feature/feature-bento/styles.css +7 -0
- package/blocks/feature/feature-bento/template.html +1 -0
- package/blocks/feature/feature-compare-table/README.md +44 -0
- package/blocks/feature/feature-compare-table/styles.css +15 -0
- package/blocks/feature/feature-compare-table/template.html +1 -0
- package/blocks/feature/feature-comparison/README.md +34 -0
- package/blocks/feature/feature-comparison/styles.css +6 -0
- package/blocks/feature/feature-comparison/template.html +1 -0
- package/blocks/feature/feature-grid-3/README.md +34 -0
- package/blocks/feature/feature-grid-3/styles.css +8 -0
- package/blocks/feature/feature-grid-3/template.html +1 -0
- package/blocks/feature/feature-icon-list/README.md +39 -0
- package/blocks/feature/feature-icon-list/styles.css +9 -0
- package/blocks/feature/feature-icon-list/template.html +1 -0
- package/blocks/feature/feature-spotlight/README.md +39 -0
- package/blocks/feature/feature-spotlight/styles.css +5 -0
- package/blocks/feature/feature-spotlight/template.html +1 -0
- package/blocks/feature/feature-stats-band/README.md +33 -0
- package/blocks/feature/feature-stats-band/styles.css +8 -0
- package/blocks/feature/feature-stats-band/template.html +1 -0
- package/blocks/feature/feature-tabs/README.md +38 -0
- package/blocks/feature/feature-tabs/styles.css +7 -0
- package/blocks/feature/feature-tabs/template.html +1 -0
- package/blocks/feature/feature-thumb-list/README.md +38 -0
- package/blocks/feature/feature-thumb-list/styles.css +13 -0
- package/blocks/feature/feature-thumb-list/template.html +1 -0
- package/blocks/feature/feature-zigzag/README.md +31 -0
- package/blocks/feature/feature-zigzag/styles.css +6 -0
- package/blocks/feature/feature-zigzag/template.html +1 -0
- package/blocks/footer/footer-columns/README.md +39 -0
- package/blocks/footer/footer-columns/styles.css +16 -0
- package/blocks/footer/footer-columns/template.html +1 -0
- package/blocks/footer/footer-compact/README.md +33 -0
- package/blocks/footer/footer-compact/styles.css +12 -0
- package/blocks/footer/footer-compact/template.html +1 -0
- package/blocks/footer/footer-cta/README.md +37 -0
- package/blocks/footer/footer-cta/styles.css +18 -0
- package/blocks/footer/footer-cta/template.html +1 -0
- package/blocks/footer/footer-social/README.md +37 -0
- package/blocks/footer/footer-social/styles.css +17 -0
- package/blocks/footer/footer-social/template.html +1 -0
- package/blocks/footer/footer-wordmark/README.md +40 -0
- package/blocks/footer/footer-wordmark/styles.css +19 -0
- package/blocks/footer/footer-wordmark/template.html +1 -0
- package/blocks/gallery/gallery-before-after/README.md +31 -0
- package/blocks/gallery/gallery-before-after/styles.css +6 -0
- package/blocks/gallery/gallery-before-after/template.html +1 -0
- package/blocks/gallery/gallery-carousel/README.md +32 -0
- package/blocks/gallery/gallery-carousel/styles.css +7 -0
- package/blocks/gallery/gallery-carousel/template.html +1 -0
- package/blocks/gallery/gallery-grid/README.md +39 -0
- package/blocks/gallery/gallery-grid/styles.css +13 -0
- package/blocks/gallery/gallery-grid/template.html +1 -0
- package/blocks/gallery/gallery-masonry/README.md +33 -0
- package/blocks/gallery/gallery-masonry/styles.css +4 -0
- package/blocks/gallery/gallery-masonry/template.html +1 -0
- package/blocks/gallery/gallery-mosaic-split/README.md +40 -0
- package/blocks/gallery/gallery-mosaic-split/styles.css +15 -0
- package/blocks/gallery/gallery-mosaic-split/template.html +1 -0
- package/blocks/hero/hero-asymmetric/README.md +34 -0
- package/blocks/hero/hero-asymmetric/styles.css +13 -0
- package/blocks/hero/hero-asymmetric/template.html +10 -0
- package/blocks/hero/hero-before-after/README.md +38 -0
- package/blocks/hero/hero-before-after/styles.css +8 -0
- package/blocks/hero/hero-before-after/template.html +19 -0
- package/blocks/hero/hero-editorial/README.md +34 -0
- package/blocks/hero/hero-editorial/block.meta.json +85 -0
- package/blocks/hero/hero-editorial/styles.css +6 -0
- package/blocks/hero/hero-editorial/template.html +10 -0
- package/blocks/hero/hero-evidence/README.md +32 -0
- package/blocks/hero/hero-evidence/block.meta.json +85 -0
- package/blocks/hero/hero-evidence/styles.css +13 -0
- package/blocks/hero/hero-evidence/template.html +1 -0
- package/blocks/hero/hero-form/README.md +46 -0
- package/blocks/hero/hero-form/styles.css +11 -0
- package/blocks/hero/hero-form/template.html +15 -0
- package/blocks/hero/hero-menu/README.md +36 -0
- package/blocks/hero/hero-menu/styles.css +7 -0
- package/blocks/hero/hero-menu/template.html +10 -0
- package/blocks/hero/hero-overlay/README.md +35 -0
- package/blocks/hero/hero-overlay/styles.css +14 -0
- package/blocks/hero/hero-overlay/template.html +10 -0
- package/blocks/hero/hero-page/README.md +35 -0
- package/blocks/hero/hero-page/styles.css +19 -0
- package/blocks/hero/hero-page/template.html +1 -0
- package/blocks/hero/hero-product/README.md +41 -0
- package/blocks/hero/hero-product/styles.css +11 -0
- package/blocks/hero/hero-product/template.html +14 -0
- package/blocks/hero/hero-service/README.md +37 -0
- package/blocks/hero/hero-service/block.meta.json +85 -0
- package/blocks/hero/hero-service/styles.css +17 -0
- package/blocks/hero/hero-service/template.html +1 -0
- package/blocks/hero/hero-split/README.md +36 -0
- package/blocks/hero/hero-split/styles.css +7 -0
- package/blocks/hero/hero-split/template.html +11 -0
- package/blocks/hero/hero-statement/README.md +33 -0
- package/blocks/hero/hero-statement/styles.css +8 -0
- package/blocks/hero/hero-statement/template.html +1 -0
- package/blocks/hero/hero-stats/README.md +37 -0
- package/blocks/hero/hero-stats/styles.css +10 -0
- package/blocks/hero/hero-stats/template.html +10 -0
- package/blocks/hero/hero-video-still/README.md +36 -0
- package/blocks/hero/hero-video-still/styles.css +9 -0
- package/blocks/hero/hero-video-still/template.html +13 -0
- package/blocks/icons.md +44 -0
- package/blocks/incentives/incentive-banner/README.md +28 -0
- package/blocks/incentives/incentive-banner/styles.css +7 -0
- package/blocks/incentives/incentive-banner/template.html +1 -0
- package/blocks/incentives/incentive-cards/README.md +31 -0
- package/blocks/incentives/incentive-cards/styles.css +4 -0
- package/blocks/incentives/incentive-cards/template.html +1 -0
- package/blocks/navbar/nav-announcement/README.md +35 -0
- package/blocks/navbar/nav-announcement/styles.css +10 -0
- package/blocks/navbar/nav-announcement/template.html +14 -0
- package/blocks/navbar/nav-centered/README.md +35 -0
- package/blocks/navbar/nav-centered/styles.css +11 -0
- package/blocks/navbar/nav-centered/template.html +12 -0
- package/blocks/navbar/nav-minimal/README.md +29 -0
- package/blocks/navbar/nav-minimal/styles.css +5 -0
- package/blocks/navbar/nav-minimal/template.html +6 -0
- package/blocks/navbar/nav-split/README.md +34 -0
- package/blocks/navbar/nav-split/styles.css +11 -0
- package/blocks/navbar/nav-split/template.html +11 -0
- package/blocks/navbar/nav-utility/README.md +37 -0
- package/blocks/navbar/nav-utility/styles.css +17 -0
- package/blocks/navbar/nav-utility/template.html +12 -0
- package/blocks/pricing/menu-featured/README.md +34 -0
- package/blocks/pricing/menu-featured/styles.css +4 -0
- package/blocks/pricing/menu-featured/template.html +1 -0
- package/blocks/pricing/menu-sections/README.md +33 -0
- package/blocks/pricing/menu-sections/styles.css +9 -0
- package/blocks/pricing/menu-sections/template.html +1 -0
- package/blocks/pricing/pricing-table/README.md +40 -0
- package/blocks/pricing/pricing-table/styles.css +9 -0
- package/blocks/pricing/pricing-table/template.html +1 -0
- package/blocks/pricing/pricing-tiers/README.md +34 -0
- package/blocks/pricing/pricing-tiers/styles.css +7 -0
- package/blocks/pricing/pricing-tiers/template.html +1 -0
- package/blocks/pricing/pricing-toggle/README.md +34 -0
- package/blocks/pricing/pricing-toggle/styles.css +10 -0
- package/blocks/pricing/pricing-toggle/template.html +1 -0
- package/blocks/process/process-carousel/README.md +33 -0
- package/blocks/process/process-carousel/styles.css +5 -0
- package/blocks/process/process-carousel/template.html +1 -0
- package/blocks/process/process-split/README.md +35 -0
- package/blocks/process/process-split/styles.css +6 -0
- package/blocks/process/process-split/template.html +1 -0
- package/blocks/process/process-stepper/README.md +40 -0
- package/blocks/process/process-stepper/styles.css +11 -0
- package/blocks/process/process-stepper/template.html +1 -0
- package/blocks/process/process-steps/README.md +35 -0
- package/blocks/process/process-steps/styles.css +6 -0
- package/blocks/process/process-steps/template.html +1 -0
- package/blocks/process/process-sticky/README.md +38 -0
- package/blocks/process/process-sticky/styles.css +12 -0
- package/blocks/process/process-sticky/template.html +1 -0
- package/blocks/process/process-timeline/README.md +35 -0
- package/blocks/process/process-timeline/styles.css +10 -0
- package/blocks/process/process-timeline/template.html +1 -0
- package/blocks/services/services-cards/README.md +34 -0
- package/blocks/services/services-cards/styles.css +3 -0
- package/blocks/services/services-cards/template.html +1 -0
- package/blocks/services/services-carousel/README.md +34 -0
- package/blocks/services/services-carousel/styles.css +6 -0
- package/blocks/services/services-carousel/template.html +1 -0
- package/blocks/services/services-list/README.md +32 -0
- package/blocks/services/services-list/block.meta.json +85 -0
- package/blocks/services/services-list/styles.css +10 -0
- package/blocks/services/services-list/template.html +1 -0
- package/blocks/services/services-menu/README.md +39 -0
- package/blocks/services/services-menu/styles.css +6 -0
- package/blocks/services/services-menu/template.html +1 -0
- package/blocks/services/services-packages/README.md +34 -0
- package/blocks/services/services-packages/styles.css +6 -0
- package/blocks/services/services-packages/template.html +1 -0
- package/blocks/services/services-panels/README.md +36 -0
- package/blocks/services/services-panels/styles.css +15 -0
- package/blocks/services/services-panels/template.html +1 -0
- package/blocks/services/services-photo-grid/README.md +39 -0
- package/blocks/services/services-photo-grid/styles.css +10 -0
- package/blocks/services/services-photo-grid/template.html +1 -0
- package/blocks/services/services-priority/README.md +33 -0
- package/blocks/services/services-priority/block.meta.json +86 -0
- package/blocks/services/services-priority/styles.css +16 -0
- package/blocks/services/services-priority/template.html +1 -0
- package/blocks/stats/stats-cards/README.md +31 -0
- package/blocks/stats/stats-cards/styles.css +4 -0
- package/blocks/stats/stats-cards/template.html +1 -0
- package/blocks/stats/stats-mosaic/README.md +27 -0
- package/blocks/stats/stats-mosaic/styles.css +9 -0
- package/blocks/stats/stats-mosaic/template.html +1 -0
- package/blocks/stats/stats-row/README.md +29 -0
- package/blocks/stats/stats-row/styles.css +8 -0
- package/blocks/stats/stats-row/template.html +1 -0
- package/blocks/stats/stats-split/README.md +35 -0
- package/blocks/stats/stats-split/styles.css +3 -0
- package/blocks/stats/stats-split/template.html +1 -0
- package/blocks/team/team-featured/README.md +42 -0
- package/blocks/team/team-featured/styles.css +9 -0
- package/blocks/team/team-featured/template.html +1 -0
- package/blocks/team/team-grid/README.md +35 -0
- package/blocks/team/team-grid/styles.css +8 -0
- package/blocks/team/team-grid/template.html +1 -0
- package/blocks/team/team-list/README.md +32 -0
- package/blocks/team/team-list/styles.css +7 -0
- package/blocks/team/team-list/template.html +1 -0
- package/blocks/testimonial/testimonial-carousel/README.md +32 -0
- package/blocks/testimonial/testimonial-carousel/styles.css +7 -0
- package/blocks/testimonial/testimonial-carousel/template.html +1 -0
- package/blocks/testimonial/testimonial-grid/README.md +32 -0
- package/blocks/testimonial/testimonial-grid/styles.css +5 -0
- package/blocks/testimonial/testimonial-grid/template.html +1 -0
- package/blocks/testimonial/testimonial-mosaic/README.md +38 -0
- package/blocks/testimonial/testimonial-mosaic/styles.css +14 -0
- package/blocks/testimonial/testimonial-mosaic/template.html +1 -0
- package/blocks/testimonial/testimonial-platform/README.md +34 -0
- package/blocks/testimonial/testimonial-platform/styles.css +17 -0
- package/blocks/testimonial/testimonial-platform/template.html +1 -0
- package/blocks/testimonial/testimonial-rating/README.md +28 -0
- package/blocks/testimonial/testimonial-rating/styles.css +6 -0
- package/blocks/testimonial/testimonial-rating/template.html +1 -0
- package/blocks/testimonial/testimonial-spotlight/README.md +31 -0
- package/blocks/testimonial/testimonial-spotlight/styles.css +9 -0
- package/blocks/testimonial/testimonial-spotlight/template.html +1 -0
- package/blocks/testimonial/testimonial-switcher/README.md +39 -0
- package/blocks/testimonial/testimonial-switcher/styles.css +23 -0
- package/blocks/testimonial/testimonial-switcher/template.html +1 -0
- package/blocks/testimonial/testimonial-wall/README.md +34 -0
- package/blocks/testimonial/testimonial-wall/styles.css +7 -0
- package/blocks/testimonial/testimonial-wall/template.html +1 -0
- package/blocks/trust-strip/trust-badges/README.md +30 -0
- package/blocks/trust-strip/trust-badges/styles.css +5 -0
- package/blocks/trust-strip/trust-badges/template.html +1 -0
- package/blocks/trust-strip/trust-certs/README.md +31 -0
- package/blocks/trust-strip/trust-certs/styles.css +12 -0
- package/blocks/trust-strip/trust-certs/template.html +1 -0
- package/blocks/trust-strip/trust-logos/README.md +32 -0
- package/blocks/trust-strip/trust-logos/styles.css +5 -0
- package/blocks/trust-strip/trust-logos/template.html +1 -0
- package/blocks/trust-strip/trust-quote/README.md +29 -0
- package/blocks/trust-strip/trust-quote/styles.css +5 -0
- package/blocks/trust-strip/trust-quote/template.html +1 -0
- package/blocks/trust-strip/trust-reviews/README.md +35 -0
- package/blocks/trust-strip/trust-reviews/styles.css +9 -0
- package/blocks/trust-strip/trust-reviews/template.html +1 -0
- package/blocks/work/case-alternating/README.md +34 -0
- package/blocks/work/case-alternating/block.meta.json +86 -0
- package/blocks/work/case-alternating/styles.css +7 -0
- package/blocks/work/case-alternating/template.html +1 -0
- package/blocks/work/case-carousel/README.md +26 -0
- package/blocks/work/case-carousel/styles.css +7 -0
- package/blocks/work/case-carousel/template.html +1 -0
- package/blocks/work/case-header/README.md +38 -0
- package/blocks/work/case-header/styles.css +18 -0
- package/blocks/work/case-header/template.html +1 -0
- package/blocks/work/project-evidence/README.md +35 -0
- package/blocks/work/project-evidence/block.meta.json +87 -0
- package/blocks/work/project-evidence/styles.css +12 -0
- package/blocks/work/project-evidence/template.html +1 -0
- package/blocks/work/project-grid/README.md +38 -0
- package/blocks/work/project-grid/styles.css +9 -0
- package/blocks/work/project-grid/template.html +1 -0
- package/cloudflare/wrangler.forms-test.jsonc +19 -0
- package/cloudflare/wrangler.jsonc +14 -0
- package/cloudflare/wrangler.templates.jsonc +6 -0
- package/design-system/MASTER.md +76 -0
- package/design-system/calibration/v2/accuracy.html +1 -0
- package/design-system/calibration/v2/accuracy.png +0 -0
- package/design-system/calibration/v2/manifest.json +88 -0
- package/design-system/calibration/v2/probe.png +0 -0
- package/design-system/calibration/v2/vitris-northline-counsel-home-1280-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-northline-counsel-home-375-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-northline-counsel-planning-1280-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-northline-counsel-planning-375-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-tide-and-slate-home-1280-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-tide-and-slate-home-375-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-tide-and-slate-project-1280-viewport.png +0 -0
- package/design-system/calibration/v2/vitris-tide-and-slate-project-375-viewport.png +0 -0
- package/design-system/compositions/v1/README.md +13 -0
- package/design-system/compositions/v1/northline-counsel/components/contact-phone-first/styles.css +11 -0
- package/design-system/compositions/v1/northline-counsel/components/contact-phone-first/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/contact-visit/styles.css +13 -0
- package/design-system/compositions/v1/northline-counsel/components/contact-visit/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/footer-compact/styles.css +12 -0
- package/design-system/compositions/v1/northline-counsel/components/footer-compact/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/hero-evidence/styles.css +13 -0
- package/design-system/compositions/v1/northline-counsel/components/hero-evidence/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/hero-page/styles.css +19 -0
- package/design-system/compositions/v1/northline-counsel/components/hero-page/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/nav-split/styles.css +11 -0
- package/design-system/compositions/v1/northline-counsel/components/nav-split/template.html +11 -0
- package/design-system/compositions/v1/northline-counsel/components/services-priority/styles.css +16 -0
- package/design-system/compositions/v1/northline-counsel/components/services-priority/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/components/specification-ledger/styles.css +10 -0
- package/design-system/compositions/v1/northline-counsel/components/specification-ledger/template.html +1 -0
- package/design-system/compositions/v1/northline-counsel/direction.md +5 -0
- package/design-system/compositions/v1/northline-counsel/fixture-brief.json +10 -0
- package/design-system/compositions/v1/northline-counsel/media-inventory.json +1 -0
- package/design-system/compositions/v1/northline-counsel/pages/index.html +11 -0
- package/design-system/compositions/v1/northline-counsel/pages/planning.html +11 -0
- package/design-system/compositions/v1/northline-counsel/selection-receipt.json +36 -0
- package/design-system/compositions/v1/northline-counsel/site.json +1 -0
- package/design-system/compositions/v1/northline-counsel/storyboard.md +12 -0
- package/design-system/compositions/v1/northline-counsel/theme/defaults.json +1 -0
- package/design-system/compositions/v1/source-ledger.json +18 -0
- package/design-system/compositions/v1/tide-and-slate/components/contact-phone-first/styles.css +11 -0
- package/design-system/compositions/v1/tide-and-slate/components/contact-phone-first/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/components/footer-compact/styles.css +12 -0
- package/design-system/compositions/v1/tide-and-slate/components/footer-compact/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/components/hero-page/styles.css +19 -0
- package/design-system/compositions/v1/tide-and-slate/components/hero-page/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/components/hero-split/styles.css +7 -0
- package/design-system/compositions/v1/tide-and-slate/components/hero-split/template.html +11 -0
- package/design-system/compositions/v1/tide-and-slate/components/nav-split/styles.css +11 -0
- package/design-system/compositions/v1/tide-and-slate/components/nav-split/template.html +11 -0
- package/design-system/compositions/v1/tide-and-slate/components/project-evidence/styles.css +12 -0
- package/design-system/compositions/v1/tide-and-slate/components/project-evidence/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/components/services-priority/styles.css +16 -0
- package/design-system/compositions/v1/tide-and-slate/components/services-priority/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/components/specification-ledger/styles.css +10 -0
- package/design-system/compositions/v1/tide-and-slate/components/specification-ledger/template.html +1 -0
- package/design-system/compositions/v1/tide-and-slate/direction.md +5 -0
- package/design-system/compositions/v1/tide-and-slate/fixture-brief.json +10 -0
- package/design-system/compositions/v1/tide-and-slate/media/teaching/slate-roof-finished.webp +0 -0
- package/design-system/compositions/v1/tide-and-slate/media/teaching/slate-roof-finished.webp.provenance.json +9 -0
- package/design-system/compositions/v1/tide-and-slate/media/teaching/slate-roof-work.webp +0 -0
- package/design-system/compositions/v1/tide-and-slate/media/teaching/slate-roof-work.webp.provenance.json +9 -0
- package/design-system/compositions/v1/tide-and-slate/media-inventory.json +7 -0
- package/design-system/compositions/v1/tide-and-slate/pages/index.html +10 -0
- package/design-system/compositions/v1/tide-and-slate/pages/project.html +10 -0
- package/design-system/compositions/v1/tide-and-slate/site.json +1 -0
- package/design-system/compositions/v1/tide-and-slate/storyboard.md +12 -0
- package/design-system/compositions/v1/tide-and-slate/theme/defaults.json +1 -0
- package/design-system/compositions/v2/catalog.json +4018 -0
- package/design-system/compositions/v2/clearwell-directory/components/study-clearwell-directory/styles.css +3 -0
- package/design-system/compositions/v2/clearwell-directory/components/study-clearwell-directory/template.html +1 -0
- package/design-system/compositions/v2/clearwell-directory/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/clearwell-directory/pages/index.html +5 -0
- package/design-system/compositions/v2/clearwell-directory/site.json +7 -0
- package/design-system/compositions/v2/clearwell-directory/study.json +244 -0
- package/design-system/compositions/v2/clearwell-directory/theme/defaults.json +16 -0
- package/design-system/compositions/v2/clearwell-letter/components/study-clearwell-letter/styles.css +2 -0
- package/design-system/compositions/v2/clearwell-letter/components/study-clearwell-letter/template.html +1 -0
- package/design-system/compositions/v2/clearwell-letter/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/clearwell-letter/pages/index.html +5 -0
- package/design-system/compositions/v2/clearwell-letter/site.json +7 -0
- package/design-system/compositions/v2/clearwell-letter/study.json +236 -0
- package/design-system/compositions/v2/clearwell-letter/theme/defaults.json +16 -0
- package/design-system/compositions/v2/dock-radio/components/study-dock-radio/styles.css +2 -0
- package/design-system/compositions/v2/dock-radio/components/study-dock-radio/template.html +1 -0
- package/design-system/compositions/v2/dock-radio/media/teaching/original-tone-study.wav +0 -0
- package/design-system/compositions/v2/dock-radio/media/teaching/original-tone-study.wav.provenance.json +6 -0
- package/design-system/compositions/v2/dock-radio/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/dock-radio/pages/index.html +5 -0
- package/design-system/compositions/v2/dock-radio/site.json +7 -0
- package/design-system/compositions/v2/dock-radio/study.json +288 -0
- package/design-system/compositions/v2/dock-radio/theme/defaults.json +16 -0
- package/design-system/compositions/v2/fen-repair/components/study-fen-repair/styles.css +2 -0
- package/design-system/compositions/v2/fen-repair/components/study-fen-repair/template.html +1 -0
- package/design-system/compositions/v2/fen-repair/media/teaching/slate-roof-finished.webp +0 -0
- package/design-system/compositions/v2/fen-repair/media/teaching/slate-roof-finished.webp.provenance.json +9 -0
- package/design-system/compositions/v2/fen-repair/media/teaching/slate-roof-work.webp +0 -0
- package/design-system/compositions/v2/fen-repair/media/teaching/slate-roof-work.webp.provenance.json +9 -0
- package/design-system/compositions/v2/fen-repair/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/fen-repair/pages/index.html +5 -0
- package/design-system/compositions/v2/fen-repair/site.json +7 -0
- package/design-system/compositions/v2/fen-repair/study.json +236 -0
- package/design-system/compositions/v2/fen-repair/theme/defaults.json +16 -0
- package/design-system/compositions/v2/hearth-plane/components/study-hearth-plane/styles.css +2 -0
- package/design-system/compositions/v2/hearth-plane/components/study-hearth-plane/template.html +1 -0
- package/design-system/compositions/v2/hearth-plane/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/hearth-plane/pages/index.html +5 -0
- package/design-system/compositions/v2/hearth-plane/site.json +7 -0
- package/design-system/compositions/v2/hearth-plane/study.json +238 -0
- package/design-system/compositions/v2/hearth-plane/theme/defaults.json +16 -0
- package/design-system/compositions/v2/lacuna-objects/components/study-lacuna-objects/styles.css +2 -0
- package/design-system/compositions/v2/lacuna-objects/components/study-lacuna-objects/template.html +1 -0
- package/design-system/compositions/v2/lacuna-objects/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/lacuna-objects/pages/index.html +5 -0
- package/design-system/compositions/v2/lacuna-objects/site.json +7 -0
- package/design-system/compositions/v2/lacuna-objects/study.json +242 -0
- package/design-system/compositions/v2/lacuna-objects/theme/defaults.json +16 -0
- package/design-system/compositions/v2/loop-room/components/study-loop-room/styles.css +2 -0
- package/design-system/compositions/v2/loop-room/components/study-loop-room/template.html +1 -0
- package/design-system/compositions/v2/loop-room/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/loop-room/pages/index.html +5 -0
- package/design-system/compositions/v2/loop-room/site.json +7 -0
- package/design-system/compositions/v2/loop-room/study.json +253 -0
- package/design-system/compositions/v2/loop-room/theme/defaults.json +16 -0
- package/design-system/compositions/v2/manifest.json +740 -0
- package/design-system/compositions/v2/mara-reading-room/components/study-mara-reading-room/styles.css +2 -0
- package/design-system/compositions/v2/mara-reading-room/components/study-mara-reading-room/template.html +1 -0
- package/design-system/compositions/v2/mara-reading-room/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/mara-reading-room/pages/index.html +5 -0
- package/design-system/compositions/v2/mara-reading-room/site.json +7 -0
- package/design-system/compositions/v2/mara-reading-room/study.json +246 -0
- package/design-system/compositions/v2/mara-reading-room/theme/defaults.json +16 -0
- package/design-system/compositions/v2/mara-specimen/components/study-mara-specimen/styles.css +3 -0
- package/design-system/compositions/v2/mara-specimen/components/study-mara-specimen/template.html +1 -0
- package/design-system/compositions/v2/mara-specimen/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/mara-specimen/pages/index.html +5 -0
- package/design-system/compositions/v2/mara-specimen/site.json +7 -0
- package/design-system/compositions/v2/mara-specimen/study.json +244 -0
- package/design-system/compositions/v2/mara-specimen/theme/defaults.json +16 -0
- package/design-system/compositions/v2/margin-journal/components/study-margin-journal/styles.css +2 -0
- package/design-system/compositions/v2/margin-journal/components/study-margin-journal/template.html +1 -0
- package/design-system/compositions/v2/margin-journal/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/margin-journal/pages/index.html +5 -0
- package/design-system/compositions/v2/margin-journal/site.json +7 -0
- package/design-system/compositions/v2/margin-journal/study.json +242 -0
- package/design-system/compositions/v2/margin-journal/theme/defaults.json +16 -0
- package/design-system/compositions/v2/night-orchard/components/study-night-orchard/styles.css +2 -0
- package/design-system/compositions/v2/night-orchard/components/study-night-orchard/template.html +1 -0
- package/design-system/compositions/v2/night-orchard/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/night-orchard/pages/index.html +5 -0
- package/design-system/compositions/v2/night-orchard/site.json +7 -0
- package/design-system/compositions/v2/night-orchard/study.json +247 -0
- package/design-system/compositions/v2/night-orchard/theme/defaults.json +16 -0
- package/design-system/compositions/v2/previews/clearwell-directory-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-directory-home-390.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-directory-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-directory-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-letter-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-letter-home-390.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-letter-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/clearwell-letter-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/dock-radio-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/dock-radio-home-390.png +0 -0
- package/design-system/compositions/v2/previews/dock-radio-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/dock-radio-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/fen-repair-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/fen-repair-home-390.png +0 -0
- package/design-system/compositions/v2/previews/fen-repair-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/fen-repair-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/hearth-plane-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/hearth-plane-home-390.png +0 -0
- package/design-system/compositions/v2/previews/hearth-plane-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/hearth-plane-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/lacuna-objects-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/lacuna-objects-home-390.png +0 -0
- package/design-system/compositions/v2/previews/lacuna-objects-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/lacuna-objects-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/loop-room-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/loop-room-home-390.png +0 -0
- package/design-system/compositions/v2/previews/loop-room-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/loop-room-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/mara-reading-room-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/mara-reading-room-home-390.png +0 -0
- package/design-system/compositions/v2/previews/mara-reading-room-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/mara-reading-room-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/mara-specimen-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/mara-specimen-home-390.png +0 -0
- package/design-system/compositions/v2/previews/mara-specimen-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/mara-specimen-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/margin-journal-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/margin-journal-home-390.png +0 -0
- package/design-system/compositions/v2/previews/margin-journal-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/margin-journal-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/night-orchard-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/night-orchard-home-390.png +0 -0
- package/design-system/compositions/v2/previews/night-orchard-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/night-orchard-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/relay-workflow-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/relay-workflow-home-390.png +0 -0
- package/design-system/compositions/v2/previews/relay-workflow-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/relay-workflow-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/rivet-components-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/rivet-components-home-390.png +0 -0
- package/design-system/compositions/v2/previews/rivet-components-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/rivet-components-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/signal-fair-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/signal-fair-home-390.png +0 -0
- package/design-system/compositions/v2/previews/signal-fair-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/signal-fair-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/sundial-goods-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/sundial-goods-home-390.png +0 -0
- package/design-system/compositions/v2/previews/sundial-goods-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/sundial-goods-interior-390.png +0 -0
- package/design-system/compositions/v2/previews/thread-mender-home-1440.png +0 -0
- package/design-system/compositions/v2/previews/thread-mender-home-390.png +0 -0
- package/design-system/compositions/v2/previews/thread-mender-interior-1440.png +0 -0
- package/design-system/compositions/v2/previews/thread-mender-interior-390.png +0 -0
- package/design-system/compositions/v2/relay-workflow/components/study-relay-workflow/styles.css +2 -0
- package/design-system/compositions/v2/relay-workflow/components/study-relay-workflow/template.html +1 -0
- package/design-system/compositions/v2/relay-workflow/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/relay-workflow/pages/index.html +5 -0
- package/design-system/compositions/v2/relay-workflow/site.json +7 -0
- package/design-system/compositions/v2/relay-workflow/study.json +283 -0
- package/design-system/compositions/v2/relay-workflow/theme/defaults.json +16 -0
- package/design-system/compositions/v2/rivet-components/components/study-rivet-components/styles.css +2 -0
- package/design-system/compositions/v2/rivet-components/components/study-rivet-components/template.html +1 -0
- package/design-system/compositions/v2/rivet-components/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/rivet-components/pages/index.html +5 -0
- package/design-system/compositions/v2/rivet-components/site.json +7 -0
- package/design-system/compositions/v2/rivet-components/study.json +241 -0
- package/design-system/compositions/v2/rivet-components/theme/defaults.json +16 -0
- package/design-system/compositions/v2/signal-fair/components/study-signal-fair/styles.css +2 -0
- package/design-system/compositions/v2/signal-fair/components/study-signal-fair/template.html +1 -0
- package/design-system/compositions/v2/signal-fair/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/signal-fair/pages/index.html +5 -0
- package/design-system/compositions/v2/signal-fair/site.json +7 -0
- package/design-system/compositions/v2/signal-fair/study.json +271 -0
- package/design-system/compositions/v2/signal-fair/theme/defaults.json +16 -0
- package/design-system/compositions/v2/sundial-goods/components/study-sundial-goods/styles.css +2 -0
- package/design-system/compositions/v2/sundial-goods/components/study-sundial-goods/template.html +1 -0
- package/design-system/compositions/v2/sundial-goods/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/sundial-goods/pages/index.html +5 -0
- package/design-system/compositions/v2/sundial-goods/site.json +7 -0
- package/design-system/compositions/v2/sundial-goods/study.json +247 -0
- package/design-system/compositions/v2/sundial-goods/theme/defaults.json +16 -0
- package/design-system/compositions/v2/thread-mender/components/study-thread-mender/styles.css +2 -0
- package/design-system/compositions/v2/thread-mender/components/study-thread-mender/template.html +1 -0
- package/design-system/compositions/v2/thread-mender/pages/detail/index.html +5 -0
- package/design-system/compositions/v2/thread-mender/pages/index.html +5 -0
- package/design-system/compositions/v2/thread-mender/site.json +7 -0
- package/design-system/compositions/v2/thread-mender/study.json +253 -0
- package/design-system/compositions/v2/thread-mender/theme/defaults.json +16 -0
- package/design-system/knowledge/v1/README.md +8 -0
- package/design-system/knowledge/v1/catalog.json +479 -0
- package/design-system/knowledge/v1/demonstrations/assets/teaching-slate-slope.png +0 -0
- package/design-system/knowledge/v1/demonstrations/assets/teaching-slate-slope.provenance.json +12 -0
- package/design-system/knowledge/v1/demonstrations/mobile-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/mobile-weak.html +50 -0
- package/design-system/knowledge/v1/demonstrations/project-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/project-weak.html +50 -0
- package/design-system/knowledge/v1/demonstrations/repeat-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/repeat-weak.html +50 -0
- package/design-system/knowledge/v1/demonstrations/services-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/services-weak.html +50 -0
- package/design-system/knowledge/v1/demonstrations/sparse-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/sparse-weak.html +50 -0
- package/design-system/knowledge/v1/demonstrations/type-strong.html +50 -0
- package/design-system/knowledge/v1/demonstrations/type-weak.html +50 -0
- package/design-system/knowledge/v1/manifest.json +88 -0
- package/design-system/knowledge/v1/observations/mobile-strong-1080.png +0 -0
- package/design-system/knowledge/v1/observations/mobile-strong-375.png +0 -0
- package/design-system/knowledge/v1/observations/mobile-weak-1080.png +0 -0
- package/design-system/knowledge/v1/observations/mobile-weak-375.png +0 -0
- package/design-system/knowledge/v1/observations/project-strong-1080.png +0 -0
- package/design-system/knowledge/v1/observations/project-strong-375.png +0 -0
- package/design-system/knowledge/v1/observations/project-weak-1080.png +0 -0
- package/design-system/knowledge/v1/observations/project-weak-375.png +0 -0
- package/design-system/knowledge/v1/observations/type-strong-1080.png +0 -0
- package/design-system/knowledge/v1/observations/type-strong-375.png +0 -0
- package/design-system/knowledge/v1/observations/type-weak-1080.png +0 -0
- package/design-system/knowledge/v1/observations/type-weak-375.png +0 -0
- package/design-system/knowledge/v2/added-lessons.json +30 -0
- package/design-system/knowledge/v2/assets.json +14 -0
- package/design-system/knowledge/v2/fixtures/contact-alternate.html +17 -0
- package/design-system/knowledge/v2/fixtures/contact-broken.html +15 -0
- package/design-system/knowledge/v2/fixtures/contact-valid.html +20 -0
- package/design-system/knowledge/v2/fixtures/contrast-cases.html +10 -0
- package/design-system/knowledge/v2/island-audit.json +12 -0
- package/design-system/knowledge/v2/lesson-extensions.json +158 -0
- package/design-system/knowledge/v2/manifest.json +52 -0
- package/design-system/knowledge/v2/replacements.json +14 -0
- package/design-system/knowledge/v2/requirements.json +345 -0
- package/design-system/knowledge/v2/sources.json +182 -0
- package/design-system/knowledge/v3/catalog.json +1232 -0
- package/design-system/knowledge/v3/examples/catalog.json +799 -0
- package/design-system/knowledge/v3/lessons/cmp-collection-structure.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-comparison.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-contextual-action.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-contrastive-critique.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-disclosure.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-evidence-form.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-image-art-direction.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-image-sequence.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-interactive-explanation.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-local-information.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-motion-continuity.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-narrative-continuity.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-navigation.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-page-rhythm.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-process.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-proof-adjacency.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-responsive-recomposition.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-semantic-grouping.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-shared-alignment.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-sparse-media.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-surfaces-motifs.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-text-shape.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-type-roles.md +17 -0
- package/design-system/knowledge/v3/lessons/cmp-unequal-emphasis.md +17 -0
- package/design-system/knowledge/v3/manifest.json +117 -0
- package/design-system/knowledge/v3/sources.json +425 -0
- package/design-system/references/v1/README.md +27 -0
- package/design-system/references/v1/catalog.json +20035 -0
- package/design-system/references/v1/manifest.json +10 -0
- package/design-system/references/v2/README.md +27 -0
- package/design-system/references/v2/catalog.json +27382 -0
- package/design-system/references/v2/manifest.json +11 -0
- package/design-system/references/v3/README.md +27 -0
- package/design-system/references/v3/catalog.json +27628 -0
- package/design-system/references/v3/manifest.json +11 -0
- package/docs/CLI.md +299 -0
- package/docs/CLOUDFLARE.md +53 -0
- package/docs/CONTACT-FORMS.md +161 -0
- package/docs/DISTRIBUTION.md +70 -0
- package/docs/ENGINE.md +28 -0
- package/docs/PRESERVE.md +59 -0
- package/docs/SECURITY.md +23 -0
- package/docs/STOCK-MEDIA.md +66 -0
- package/licenses/blake3-wasm-LICENSE +21 -0
- package/licenses/entities-LICENSE +11 -0
- package/licenses/parse5-LICENSE +19 -0
- package/migrations/0001_init.sql +90 -0
- package/migrations/0002_analytics.sql +50 -0
- package/migrations/0003_site_updates.sql +29 -0
- package/migrations/0004_contact_forms.sql +75 -0
- package/migrations/0005_auth.sql +20 -0
- package/package.json +229 -6
- package/src/runtime/beacon.ts +329 -0
- package/src/runtime/before-after.ts +48 -0
- package/src/runtime/carousel.ts +20 -0
- package/src/runtime/cookie-compliance.ts +50 -0
- package/src/runtime/counter.ts +2 -0
- package/src/runtime/editor.ts +72 -0
- package/src/runtime/experience.ts +57 -0
- package/src/runtime/header.ts +46 -0
- package/src/runtime/leads.ts +102 -0
- package/src/runtime/lightbox.ts +26 -0
- package/src/runtime/reveal.ts +2 -0
- package/src/runtime/scroll-motion.controller.js +100 -0
- package/src/runtime/scroll-motion.count.js +21 -0
- package/src/runtime/scroll-motion.generated.ts +5 -0
- package/src/runtime/scroll-motion.vanilla.js +45 -0
- package/src/runtime/tabs.ts +40 -0
- package/src/stock/catalog.json +5445 -0
- package/src/stock/coverage.json +18 -0
- package/src/stock/picker.css +118 -0
- package/src/stock/picker.js +191 -0
- package/templates/site/.env.example +6 -0
- package/templates/site/.github/workflows/deploy.yml +59 -0
- package/templates/site/AGENTS.md +35 -0
- package/templates/site/CLAUDE.md +5 -0
- package/templates/site/GEMINI.md +5 -0
- package/templates/site/README.md +55 -0
- package/templates/site/components/README.md +18 -0
- package/templates/site/gitignore +10 -0
- package/templates/site/launch.json +14 -0
- package/templates/site/package.json +36 -0
- package/templates/site/pages/README.md +31 -0
- package/templates/site/site.json +10 -0
- package/templates/site/theme/defaults.json +17 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"release": "2026-10-06.2",
|
|
4
|
+
"status": "curated; technically validated; not human-approved taste data",
|
|
5
|
+
"selectorVersion": "task-expression-complementarity-2",
|
|
6
|
+
"catalog": {
|
|
7
|
+
"path": "catalog.json",
|
|
8
|
+
"sha256": "b386d289ce4ffafa066df487416f7782915eec3a3dcf41575d2694943cb9caaa"
|
|
9
|
+
},
|
|
10
|
+
"labeledPreferenceData": false
|
|
11
|
+
}
|
package/docs/CLI.md
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# Vitris Unified CLI & Automation Contracts
|
|
2
|
+
|
|
3
|
+
The `vitris` CLI (`@tryvitris/website-harness`) provides a unified, operator-friendly command line interface and automation harness for creating, running, refining, evaluating, sharing, and deploying static websites.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Installation & Binary
|
|
8
|
+
|
|
9
|
+
After the first registry release, install as a dependency or run via `npx`. Until then use the tarball instructions in [distribution](DISTRIBUTION.md):
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install --save-dev @tryvitris/website-harness
|
|
13
|
+
npx vitris --help
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Within the `@tryvitris/website-harness` repository itself:
|
|
17
|
+
```bash
|
|
18
|
+
npm run build:cli
|
|
19
|
+
node bin/vitris.js --help
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Command Reference
|
|
25
|
+
|
|
26
|
+
### `vitris doctor`
|
|
27
|
+
Runs environment and preflight health checks.
|
|
28
|
+
```bash
|
|
29
|
+
vitris doctor [--site <dir>] [--provider cloudflare] [--operation pages|deploy] [--json]
|
|
30
|
+
```
|
|
31
|
+
Checks:
|
|
32
|
+
- Node.js runtime version (`>= 24`)
|
|
33
|
+
- Git availability and worktree cleanliness
|
|
34
|
+
- Wrangler installation and authentication
|
|
35
|
+
- Site configuration (`launch.json`, `package.json`, `agent/graph.yaml`, `agent/STATE.json`)
|
|
36
|
+
- Active process lock (`agent/RUN.lock`)
|
|
37
|
+
- Pending transaction recovery journals (`.journal.json`)
|
|
38
|
+
- Cloudflare dual authentication (`CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID` or interactive OAuth via `wrangler whoami`)
|
|
39
|
+
- Scoped resource validation (Pages vs D1/R2)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### `vitris site create`
|
|
44
|
+
Scaffolds a new customer or project site repository with the workflow graph, agent kit, and configuration.
|
|
45
|
+
```bash
|
|
46
|
+
vitris site create --dir <target-path> --slug <site-slug> [--name <display-name>] [--from <source-url>] [--owner <email>] [--blank] [--force] [--dry-run]
|
|
47
|
+
```
|
|
48
|
+
Options:
|
|
49
|
+
- `--dir`: Target directory for the new site.
|
|
50
|
+
- `--harness`: Dependency spec (defaults to this package's exact version); before registry publication, use a tarball or explicit `file:` path relative to the new site.
|
|
51
|
+
- `--backend-origin`: Optional backend URL, saved as `launch.json.backendOrigin`. Legacy `--kernel` and `--kernel-origin` flags remain accepted.
|
|
52
|
+
- `--slug`: Unique identifier for the site (used in Cloudflare Pages project names).
|
|
53
|
+
- `--name`: Human-readable site name.
|
|
54
|
+
- `--from`: Live website URL to harvest and crawl.
|
|
55
|
+
- `--template`: Catalog template ID, display name, or hosted demo/preview URL. Records the supplied choice and continues through local preview without the selection artifact or adaptation/representative-feedback prompts. The choice is bound after harvest and media auditing so branding uses captured evidence. This route delegates section adaptation to the agent and uses existing, harvested, or stock media; AI image generation is disabled. Reference inventory, critic, fidelity, browser, and quality gates still apply. Missing content remains a visible fill-in and blocks launch.
|
|
56
|
+
- `--template-release`: Optional catalog revision for an ID/name; a hosted URL pins its revision automatically.
|
|
57
|
+
- `--content` / `--content-file`: Additional business content and instructions, supplied inline or from a UTF-8 file (up to 256 KB; choose one). Wording is preserved in `onboarding/additional-content.md`, survives harvesting, and is included in authoring and review dependencies.
|
|
58
|
+
- `--owner`: Site owner contact email.
|
|
59
|
+
- `--blank`: Initialize without a live source URL (skips initial crawl).
|
|
60
|
+
- `--force`: Overwrite existing files in non-empty directory.
|
|
61
|
+
- `--dry-run`: Preview directory scaffolding actions without touching disk.
|
|
62
|
+
|
|
63
|
+
Provide the source, template, and extra content together:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
vitris site create --dir ../acme --slug acme --from https://old-site.example --template "Still & Field" --content-file ./acme-notes.md --harness file:../vitris-harness
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Open the new site in your coding agent and continue the prepare/work/complete loop with `npm run go` until local preview is ready. The same inputs work with `vitris-create-site` and `npm run create-site -- ...`. When the initial chat already names a template and supplies content, the agent should pass them at setup and continue the workflow without asking the user to select that template again.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
### `vitris run`
|
|
74
|
+
Executes single-variant or multi-variant site generation workflows.
|
|
75
|
+
```bash
|
|
76
|
+
vitris run [--site <dir>] [--variants 1|5] [--theme <theme-name>] [--theme-scope all|one] [--restart-from <node>] [--reason <text>] [--jev-mode off|shadow|assist] [--compact-packets] [--dry-run]
|
|
77
|
+
```
|
|
78
|
+
Options:
|
|
79
|
+
- `--site`: Path to the site repository (defaults to `.`).
|
|
80
|
+
- `--template`, `--template-release`, `--content`, `--content-file`: The same direct inputs as site creation, also accepted by `npm run go -- ...`. Supply them at run start or preparation, after finishing/canceling any active stage. An identical request preserves the selection identity and history; a revised choice uses normal downstream invalidation. Later explicit picker/chat choices take precedence until a new direct request is supplied. Dry runs validate inputs without saving them. Redesign inputs are rejected in preserve mode.
|
|
81
|
+
- `--variants`: Number of design directions to generate (`1` or `5`). Default: `1`.
|
|
82
|
+
- `--theme`: Explicit design theme or direction.
|
|
83
|
+
- `--theme-scope`: In 5-variant runs, apply theme to `all` variants or `one` variant.
|
|
84
|
+
- The active host supplies the author/model. Legacy `--adapter` and `--model` options do not provide unattended author execution. Configure an independent representative-quality reviewer explicitly in `agent/adapter.reviewer.json` if needed.
|
|
85
|
+
- `--restart-from`: Invalidate and restart from a specific graph node.
|
|
86
|
+
- `--reason`: Required rationale when using `--restart-from`.
|
|
87
|
+
- `--jev-mode`: Bounded semantic decision mode (`off`, `shadow`, `assist`). Default: `off`.
|
|
88
|
+
- `--design-assist`: One preset that sets mode to `assist` and enables `creativeScoring`, `componentSelection`, and `compositionCheck` when those capabilities were not explicitly set. `--jev-mode off` and `--no-jev` win. Explicit `"creativeScoring": "off"` in `agent/jev.json` stays off. This preset does not enable `workOwnership: delegated`.
|
|
89
|
+
- `--no-jev`: Force mode `off`.
|
|
90
|
+
- `--compact-packets`: Enable bounded context packet slicing and coverage manifests.
|
|
91
|
+
- `--dry-run`: Preview workflow execution plan without launching agent loops.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Jev Decision Service & Evaluation Tooling
|
|
96
|
+
|
|
97
|
+
#### Usage Audit:
|
|
98
|
+
Audit recorded tokens, cache reads, and provider stream events across site runs:
|
|
99
|
+
```bash
|
|
100
|
+
node scripts/audit-workflow-usage.ts --runs <runs-directory> [--out <output-json>]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Evaluation Harness:
|
|
104
|
+
Run comparative benchmarking across the 3 treatments (baseline, compact packets, compact + Jev):
|
|
105
|
+
```bash
|
|
106
|
+
node scripts/eval-jev.ts [--mock|--live] [--runs <count>] [--out <output-json>]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Packet Expansion:
|
|
110
|
+
Expand a partitioned context item on demand during active-agent execution:
|
|
111
|
+
```bash
|
|
112
|
+
node scripts/eval-site.ts --site <dir> --expand-packet <expansion-id> --node <node-id>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### `vitris refine`
|
|
118
|
+
Performs targeted, post-launch site refinements using intelligent scope routing, layout preservation, and verifiable regression constraints.
|
|
119
|
+
```bash
|
|
120
|
+
vitris refine [--site <dir>] --request "<instruction>" [--scope copy|direction|pages|business] [--force] [--dry-run]
|
|
121
|
+
```
|
|
122
|
+
Options:
|
|
123
|
+
- `--request`: Natural language change request from operator.
|
|
124
|
+
- `--scope`: Optional explicit scope override. If omitted, the classifier automatically routes to `copy`, `direction`, `pages`, or `business`.
|
|
125
|
+
- `--force`: Bypass non-critical gate warnings.
|
|
126
|
+
- `--dry-run`: Preview classified scope, rationale, and proposed change plan.
|
|
127
|
+
|
|
128
|
+
Key Invariants:
|
|
129
|
+
- Never restarts harvest.
|
|
130
|
+
- Unchanged sections and navigation structure are preserved with AST-level integrity.
|
|
131
|
+
- Recoverable file replacement with rollback on validation failure.
|
|
132
|
+
- Violating navigation links or dropping media triggers fail-closed rejection (exit code 4).
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### `vitris status`
|
|
137
|
+
Inspects the current state of a site workflow or design run.
|
|
138
|
+
```bash
|
|
139
|
+
vitris status [--site <dir>] [--run <run-id>] [--json]
|
|
140
|
+
```
|
|
141
|
+
Reports active node, attempt counts, preview status, and lock ownership without altering progress or acquiring locks.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### `vitris resume`
|
|
146
|
+
Resumes a paused, interrupted, or checkpointed workflow.
|
|
147
|
+
```bash
|
|
148
|
+
vitris resume [--site <dir>] [--run <run-id>] [--dry-run]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
Production browser verification defaults to a one-hour subprocess timeout. Set `VITRIS_BROWSER_TIMEOUT_MS` to a bounded integer from 1000 to 86400000 milliseconds when the full route and motion suite needs a different limit. The outer production verifier allows an additional minute for preflight to seal its report. This changes only the runtime allowance; every browser, accessibility, motion and performance check still runs.
|
|
154
|
+
|
|
155
|
+
### `vitris cancel`
|
|
156
|
+
Safely terminates an active workflow run, releases process locks (`agent/RUN.lock`), and cleans up stale temporary files.
|
|
157
|
+
```bash
|
|
158
|
+
vitris cancel [--site <dir>] [--run <run-id>]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### `vitris feedback import`
|
|
164
|
+
Imports structured stakeholder feedback for multi-variant design review.
|
|
165
|
+
```bash
|
|
166
|
+
vitris feedback import [--site <dir>] [--run <run-id>] --file <feedback.json> [--dry-run]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### `vitris synthesize`
|
|
172
|
+
Synthesizes stakeholder feedback across 5 variants into a unified, high-quality final site candidate.
|
|
173
|
+
```bash
|
|
174
|
+
vitris synthesize [--site <dir>] [--run <run-id>] [--feedback <feedback.json>] [--dry-run]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### `vitris verify`
|
|
180
|
+
Evaluates build verification and all deterministic graph gates.
|
|
181
|
+
```bash
|
|
182
|
+
vitris verify [--site <dir>] [--json] [--dry-run]
|
|
183
|
+
```
|
|
184
|
+
Returns structured gate summaries and exit code `0` (pass) or `1` (gates failed).
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### `vitris preview`
|
|
189
|
+
Serves the local static `dist/` bundle with Single-Page Application (SPA) routing, migration redirect emulation, and cookie compliance sandboxing.
|
|
190
|
+
```bash
|
|
191
|
+
vitris preview [--site <dir>] [--port <number>] [--dry-run]
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### `vitris deploy`
|
|
197
|
+
Builds a verified production bundle and deploys it to Cloudflare Pages.
|
|
198
|
+
```bash
|
|
199
|
+
vitris deploy [--site <dir>] [--provider cloudflare] [--environment preview|production] [--branch <branch>] [--dry-run]
|
|
200
|
+
```
|
|
201
|
+
Workflow:
|
|
202
|
+
1. Scoped preflight check verifying Cloudflare credentials (`CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID` or `wrangler login`).
|
|
203
|
+
2. Build verified static `dist/` bundle (aborts if build fails or is dirty).
|
|
204
|
+
3. Executes `npx wrangler pages deploy dist --project-name=<slug>`.
|
|
205
|
+
4. Executes automated remote smoke check against the deployed `*.pages.dev` URL.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### `vitris share`
|
|
210
|
+
Launches an authenticated preview or interactive multi-variant comparison review server.
|
|
211
|
+
```bash
|
|
212
|
+
vitris share [--site <dir>] [--run <run-id>] [--port <number>] [--dry-run]
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 3. Automation Contracts
|
|
218
|
+
|
|
219
|
+
The `vitris` CLI is designed for programmatic execution in CI/CD pipelines, agent harnesses, and orchestration scripts.
|
|
220
|
+
|
|
221
|
+
### Stable Exit Codes
|
|
222
|
+
|
|
223
|
+
| Code | Constant | Meaning |
|
|
224
|
+
| :---: | :--- | :--- |
|
|
225
|
+
| `0` | `SUCCESS` | Command completed successfully. |
|
|
226
|
+
| `1` | `GATES_FAILED` | Graph evaluation or quality verification failed. |
|
|
227
|
+
| `2` | `CONFIG_OR_CLI_ERROR` | Missing or invalid arguments, configuration, or environment. |
|
|
228
|
+
| `3` | `PRECONDITION_FAILED` | Directory already exists, required predecessor not finished. |
|
|
229
|
+
| `4` | `REFINEMENT_REJECTED` | Proposed refinement caused a regression (e.g. dropped route or missing asset). |
|
|
230
|
+
| `5` | `ABORTED` | Execution canceled via signal (`SIGINT`, `SIGTERM`, `AbortSignal`). |
|
|
231
|
+
| `6` | `DEPLOYMENT_FAILED` | Cloudflare Pages deployment or remote smoke check failed. |
|
|
232
|
+
|
|
233
|
+
### Structured Output Modes
|
|
234
|
+
|
|
235
|
+
`--json` and `--events` are **strictly mutually exclusive**:
|
|
236
|
+
- `--json`: Emits exactly one valid JSON envelope to `stdout` upon completion.
|
|
237
|
+
- `--events`: Streams timestamped NDJSON events (`{"type": "...", "timestamp": "...", ...}`) to `stdout`.
|
|
238
|
+
|
|
239
|
+
#### Standard JSON Envelope Schema
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"ok": true,
|
|
243
|
+
"exitCode": 0,
|
|
244
|
+
"summary": "Human-readable summary message",
|
|
245
|
+
"data": {},
|
|
246
|
+
"failures": [],
|
|
247
|
+
"error": "Error message if ok is false"
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Security & Credential Isolation
|
|
252
|
+
|
|
253
|
+
- Tokens, passwords, and API secrets are **never** logged to stdout, stderr, or event streams.
|
|
254
|
+
- Credentials are **never** written into `launch.json`, prompts, or artifacts.
|
|
255
|
+
- Subprocesses receive environment variables directly via secure process inheritance.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 4. Programmatic TypeScript API
|
|
260
|
+
|
|
261
|
+
The CLI features are also exported as an ES Module TypeScript API:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
import {
|
|
265
|
+
createSite,
|
|
266
|
+
runDoctor,
|
|
267
|
+
runSite,
|
|
268
|
+
refineSite,
|
|
269
|
+
statusSite,
|
|
270
|
+
resumeSite,
|
|
271
|
+
cancelSite,
|
|
272
|
+
importFeedback,
|
|
273
|
+
synthesizeSite,
|
|
274
|
+
verifySite,
|
|
275
|
+
previewSite,
|
|
276
|
+
deploySite,
|
|
277
|
+
shareSite,
|
|
278
|
+
EXIT_CODES,
|
|
279
|
+
} from "@tryvitris/website-harness/cli";
|
|
280
|
+
|
|
281
|
+
// Example: Run doctor preflight
|
|
282
|
+
const doctorResult = await runDoctor({ site: "./my-site", provider: "cloudflare" });
|
|
283
|
+
if (!doctorResult.ok) {
|
|
284
|
+
console.error("Doctor failed:", doctorResult.summary);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Example: Refine copy with AbortController
|
|
288
|
+
const controller = new AbortController();
|
|
289
|
+
const refineResult = await refineSite({
|
|
290
|
+
site: "./my-site",
|
|
291
|
+
request: "Update homepage headline to emphasize local reliability.",
|
|
292
|
+
signal: controller.signal,
|
|
293
|
+
});
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
### Reproducible harness checks and trials
|
|
298
|
+
|
|
299
|
+
`npm run test:freeze` runs typecheck, CLI build, the full tests, a packed install/build smoke check, and source archive round-trip verification. It writes a new baseline under `artifacts/official-test/`. See [official test protocol](OFFICIAL-TEST.md) for trial creation, active-agent continuation, spend limitations, and outcome labeling.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Use your own Cloudflare account
|
|
2
|
+
|
|
3
|
+
Local authoring, compilation and preview require no Cloudflare account or API keys. Hosting is an explicit later operation. These examples provision resources in your own account.
|
|
4
|
+
|
|
5
|
+
## Static customer websites
|
|
6
|
+
|
|
7
|
+
Create a Cloudflare account. From the customer directory run `npx wrangler login`, check the account with `npx wrangler whoami`, and run `npx wrangler pages project create YOUR_PROJECT`. Set `launch.json.pagesProject` to that name. CI uses your own `CLOUDFLARE_ACCOUNT_ID` and an account-scoped token with Pages Edit access, stored in protected CI secrets. Never put a token in launch.json, HTML, assets or Git.
|
|
8
|
+
|
|
9
|
+
Run `npm run build` and `npm run preflight` locally. Run `npm run deploy` only when you intend to upload. Accept the hosted preview before separate custom-domain and DNS changes. Preservation mode supports temporary previews; follow PRESERVE.md for its narrower contract.
|
|
10
|
+
|
|
11
|
+
## Optional backend Worker
|
|
12
|
+
|
|
13
|
+
Copy `node_modules/@tryvitris/website-harness/cloudflare/wrangler.jsonc` to a dedicated backend directory. Set `main` to the installed harness's `bin/cloudflare/backend.js` and `migrations_dir` to its `migrations` directory, relative to the copied config. Install Wrangler there. Choose your own Worker, database, bucket, namespace, workflow and analytics dataset names.
|
|
14
|
+
|
|
15
|
+
After `npx wrangler login`, provision your resources:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npx wrangler d1 create my-vitris
|
|
19
|
+
npx wrangler kv namespace create KV
|
|
20
|
+
npx wrangler r2 bucket create my-vitris-assets
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Replace the D1 and KV placeholders with the returned IDs. Account selection uses your login or your own CLOUDFLARE_ACCOUNT_ID. Initialize the database explicitly with `npx wrangler d1 migrations apply my-vitris --remote --config wrangler.jsonc`.
|
|
24
|
+
|
|
25
|
+
Generate your own long random session secret and run `npx wrangler secret put SESSION_SECRET --config wrangler.jsonc`. Keep DEV_LOGIN unset in production. Optional email/GitHub integrations use your credentials through `wrangler secret put`. Worker-managed Pages publication additionally needs your own CF_ACCOUNT_ID, narrowly scoped CF_API_TOKEN, and matching PUBLISH_ATTESTATION_SECRET in the Worker and protected site CI. Direct static Pages hosting does not require these Worker features.
|
|
26
|
+
|
|
27
|
+
Apply all migrations, including `0005_auth.sql`, before upgrading the Worker. This upgrade intentionally invalidates old KV sessions and magic links. Production creates no demo users: provision legitimate tenant/user/membership rows through your own controlled D1 administration, using your actual owner/operator email and generated UUIDs. Never import the local demo operator into production.
|
|
28
|
+
|
|
29
|
+
Configure production sign-in delivery with either GMAIL_SA_CLIENT_EMAIL, GMAIL_SA_PRIVATE_KEY and GMAIL_IMPERSONATE (or MAIL_FROM), or MAIL_API_KEY and MAIL_FROM for Resend. Keep VITRIS_BACKEND_ORIGIN set to the HTTPS administration origin. Missing mail configuration returns an unavailable response; failed delivery never exposes a sign-in link. Verify delivery to your own account before onboarding users.
|
|
30
|
+
|
|
31
|
+
### Private GitHub site previews
|
|
32
|
+
|
|
33
|
+
Set PREVIEW_HOST_SUFFIX to a dedicated domain such as `previews.your-domain.example` and route `*.previews.your-domain.example` to this Worker using your own DNS, Worker routes and TLS configuration. Reserve that suffix exclusively for Vitris previews. APP_HOST, OPS_HOST and the backend origin must remain outside it. A tenant with slug `acme` renders at `https://acme.previews.your-domain.example/preview/acme/`; no administration or APIs run on that host.
|
|
34
|
+
|
|
35
|
+
Open `/preview/acme/` from the signed-in admin app. Owners can open only their own tenant; operators can open any registered tenant. The app redirects using a signed 15-minute access handoff, which becomes a host-only HttpOnly cookie before any customer HTML renders. Keep that handoff private. Preview requests verify the session in D1, enforce the selected GitHub branch and stop working after logout or expiry. Reopen from the admin app to renew access. With no separate preview suffix, hosted previews remain unavailable. Public customer sites still deploy independently to Pages; local CLI previews are unchanged.
|
|
36
|
+
|
|
37
|
+
### Validate and launch
|
|
38
|
+
|
|
39
|
+
Validate without deploying using `npx wrangler deploy --dry-run --config wrangler.jsonc`. Deploy explicitly when ready and set the resulting URL in the customer's launch.json.backendOrigin. Contact form registration, allowed origins, delivery and Turnstile setup are separate; follow CONTACT-FORMS.md and test delivery before launch.
|
|
40
|
+
|
|
41
|
+
Optional template-library and isolated form-test configs also use your resources. The public Vitris demonstration library is a separate hosted service; browsing it conveys no credentials or ownership of its assets.
|
|
42
|
+
|
|
43
|
+
## Credentials
|
|
44
|
+
|
|
45
|
+
Keep local .dev.vars and .env files ignored. Use Cloudflare secrets and protected CI secrets in production. Copy public configuration, never another operator's credential files. Wrangler's authentication cache stays outside the package. See SECURITY.md for release auditing.
|
|
46
|
+
|
|
47
|
+
Cloudflare references: [configuration](https://developers.cloudflare.com/workers/wrangler/configuration/) and [secrets](https://developers.cloudflare.com/workers/configuration/secrets/).
|
|
48
|
+
|
|
49
|
+
## Optional repository previews
|
|
50
|
+
|
|
51
|
+
The Worker preview GitHub workflow is disabled by default. A repository owner may opt in with the `VITRIS_WORKER_PREVIEW_ENABLED=true` repository variable after provisioning their own isolated preview resources and GitHub secrets. No account credentials are included in source.
|
|
52
|
+
|
|
53
|
+
Template library maintainers also configure their own `VITRIS_TEMPLATE_ORIGIN`, `VITRIS_TEMPLATE_BUCKET`, R2 S3 endpoint, and access credentials; see `agent/refs/template-library.md`. Static-site users can use the public gallery without those credentials.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Shared Vitris contact forms
|
|
2
|
+
|
|
3
|
+
One shared Worker serves preserved and generated/custom websites. Each site keeps its authored layouts, labels and controls. There is no structured website editor. The public `/api/leads` transport remains, but inferred Origin/Referer tenants, preview slugs, wildcard CORS and the old KV lead counter no longer authorize submissions. Existing leads and unrelated Gmail/Resend workflows are preserved.
|
|
4
|
+
|
|
5
|
+
## Configuration and migration
|
|
6
|
+
|
|
7
|
+
Apply additive migration `0004_contact_forms.sql` after the existing migrations. Back up D1 first for an authorized rollout. It does not enable any existing form or modify old lead rows/site configuration. Old assets without a registered `form_id`, retry UUID and challenge token receive a configuration error. Upgrade their assets with the setup workflow; keep a site disabled until verification is complete. Unconverted old forms need an accessible listed contact option during this transition.
|
|
8
|
+
|
|
9
|
+
The server stores `contact_forms.config_json`: stable global form ID, tenant ID, `disabled | test | live`, exact origins, field schema/mappings, recipients, and Turnstile sitekey/action/secret reference. Public `launch.json.forms` contains only `{ id, pagePath, index, sitekey, action }`. Backend origin alone enables neither submission nor live notifications. New sites have empty bindings and show a preview notice. Server mode decides acceptance; browser attributes cannot activate live delivery.
|
|
10
|
+
|
|
11
|
+
`vitris forms inspect --site SITE --json` builds and inventories forms. Only `data-lead-form` or recognized legacy `emailSendButton` contact forms qualify. Search/login/payment forms remain unrelated. File inputs, unknown hidden fields, custom submission handlers, unsupported control types, duplicate scalar names and unsupported multiple selects are reported; setup fails instead of discarding fields. Capture refuses unrelated interactive forms until an explicit preservation adapter exists. Attachments and visitor autoresponders are outside v1.
|
|
12
|
+
|
|
13
|
+
Setup infers bounded schemas from every named supported control. It recognizes `number`, `telephone`, `phone_number`, `phoneNumber` and `phone` as phone aliases, retaining their HTML names. Textarea limits can preserve the legacy 5,000-character field. All fields remain in the submission snapshot and notification; name/email/phone/message mappings also populate the existing production leads table. Choice values must match configured options; checkbox groups preserve multiple values. Schemas have at most 32 fields, 40 options/values per choice field, 8,000 characters per field and five server-configured recipients. A required visitor email mapping is mandatory. For deliberate schema/label/mapping changes, use `--forms-config FILE` with a `{forms:[...]}` array containing complete server configurations plus `pagePath` and `index`. Keep this operator file outside public assets. Stabilize authored form IDs explicitly when reordering forms.
|
|
14
|
+
|
|
15
|
+
## Local sandbox
|
|
16
|
+
|
|
17
|
+
`wrangler.forms-test.jsonc` has local resource placeholders, public test-only credentials, no email binding, and `FORMS_SANDBOX=1`, which forbids live activation. Never deploy it unchanged. Use a separate persistence directory; none of these commands applies a remote migration:
|
|
18
|
+
|
|
19
|
+
```powershell
|
|
20
|
+
npx wrangler d1 migrations apply vitris-forms-test --local --config wrangler.forms-test.jsonc --persist-to artifacts/contact-forms/wrangler-state
|
|
21
|
+
npx wrangler dev --local --config wrangler.forms-test.jsonc --persist-to artifacts/contact-forms/wrangler-state --port 8789 --test-scheduled
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
In another terminal, serve a **copy** of the acceptance project on a fixed port, then register that exact origin:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
$env:VITRIS_FORMS_SETUP_TOKEN = 'local-test-setup-key-never-use-in-production'
|
|
28
|
+
node bin/vitris.js forms inspect --site artifacts/contact-forms/dwperrotta-local --json
|
|
29
|
+
node bin/vitris.js forms setup --site artifacts/contact-forms/dwperrotta-local --tenant dw-test --backend-origin http://127.0.0.1:8789 --origins http://localhost:4173 --mode test --test-keys --json
|
|
30
|
+
# Review artifacts/forms/setup-plan.json, then reconcile:
|
|
31
|
+
node bin/vitris.js forms setup --site artifacts/contact-forms/dwperrotta-local --tenant dw-test --backend-origin http://127.0.0.1:8789 --origins http://localhost:4173 --mode test --test-keys --apply --json
|
|
32
|
+
node bin/vitris.js forms status --site artifacts/contact-forms/dwperrotta-local --tenant dw-test --backend-origin http://127.0.0.1:8789 --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Use `vitris preview --site SITE --port 4173` to serve the copy. The scheduled test endpoint is Wrangler's `/__scheduled?cron=*/5%20*%20*%20*%20*`. It captures test notifications in D1. Do not bind remote mail to this sandbox.
|
|
36
|
+
|
|
37
|
+
The `--test-keys` preset prepares controlled tests with action `test`; it does not provide manual end-to-end acceptance against the public Siteverify endpoint. In the actual October 9 smoke check, Cloudflare accepted its public dummy token but returned hostname `example.com` with no action. The service correctly rejected that result for the configured local hostname/action. Official dummy tokens can also repeat; this service's replay guard rejects reuse of an accepted token. Use a real widget with server mode `test` for manual end-to-end acceptance, or the deterministic unique-token fixture in the browser tests. Do not weaken hostname/action verification or replay protection for dummy keys. The automated browser fixture calls the real submission handler and D1, but substitutes Siteverify and widget execution; it does not validate Cloudflare's live challenge execution.
|
|
38
|
+
|
|
39
|
+
## Provisioning and permissions
|
|
40
|
+
|
|
41
|
+
`forms setup` writes a reviewable `artifacts/forms/setup-plan.json`. Without `--apply`, it creates no cloud resources or server configuration. `--apply` registers an authorized tenant if absent, reconciles configurations, writes public frontend bindings while preserving other launch settings, builds the site, and fetches status. Same inputs reuse IDs/resources. Omitted forms are retained; disable them explicitly rather than deleting history. Default setup mode is disabled. Setup supports only disabled/test; live activation uses the reviewed configuration API.
|
|
42
|
+
|
|
43
|
+
The backend uses tenant-scoped automation credentials in the Worker secret `FORMS_SETUP_TOKENS`, a JSON object mapping tenant IDs to separate random tokens of at least 32 characters. The CLI receives one token through `VITRIS_FORMS_SETUP_TOKEN`. These credentials permit configuration, status and retry **only for that tenant**. Do not use the existing global deploy token. Owner sessions also work with the API; mutation requests require the backend's exact Origin as CSRF protection. Customer-dashboard retry controls have the same ownership/Origin checks. No operator API exposes a Turnstile secret.
|
|
44
|
+
|
|
45
|
+
Authenticated Cloudflare APIs work unattended; an available Cloudflare management MCP may perform the same operator actions, but is not a runtime dependency. No Cloudflare management MCP was connected during this implementation. Configure `CLOUDFLARE_ACCOUNT_ID` and `CLOUDFLARE_API_TOKEN` for API provisioning. Required account permissions depend on the operation: Turnstile Read/Edit for widget inventory/allocation, Workers Scripts Read/Edit for Worker inspection/deployment/secrets, D1 Read/Edit for backup/resource creation/migrations, and KV/R2 permissions for the existing Worker bindings. Pages Edit is required for a separate preview deployment. Vitris sender onboarding requires access to the Vitris-owned zone, DNS Edit and Email Sending Edit; customer DNS is not involved. Verify token type and resource scope: account tokens use `/accounts/ACCOUNT/tokens/verify`, user tokens use `/user/tokens/verify`. Listing access alone does not prove write permission or Email Service availability.
|
|
46
|
+
|
|
47
|
+
Use `--cloudflare --worker ISOLATED_WORKER` to plan/reconcile Turnstile widgets. The command lists existing resources first. It pools exact hostnames under names `vitris-forms-pool-N`, reuses matching/capable managed widgets, leaves unmanaged widgets alone, and stops at free-plan capacity. Run account-wide pool updates serially; Cloudflare widget updates do not offer a cross-process allocation transaction. Retried setup reconciles partial completion. Supply the **complete current** `FORMS_TURNSTILE_SECRETS` JSON map in the operator environment when applying; `{}` is appropriate only for a new isolated Worker. The command fetches managed widget secrets and merges them into that map before writing the Worker secret. This prevents silently erasing other secret references. Never print or save this map in site assets.
|
|
48
|
+
|
|
49
|
+
Example plan (no cloud writes):
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
node bin/vitris.js forms setup --site SITE --tenant TENANT --backend-origin https://ISOLATED-WORKER.workers.dev --origins https://HASH.PROJECT.pages.dev --mode test --cloudflare --worker ISOLATED-WORKER --json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Approve hashed preview URLs explicitly after deployment. Never approve `*.pages.dev`. The form origin registry prevents two tenants owning the same exact origin, and registration checks existing hostname ownership. The form service reads authoritative D1 configuration on each submission; it does not use the hostname KV cache for authorization. Different sites sharing a widget still have separate form/origin/action validation and database ownership.
|
|
56
|
+
|
|
57
|
+
## Worker readiness and Email Service
|
|
58
|
+
|
|
59
|
+
Keep these settings server-side:
|
|
60
|
+
|
|
61
|
+
| Setting | Purpose |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `FORMS_TURNSTILE_SECRETS` | JSON map of secret references to Turnstile secrets |
|
|
64
|
+
| `FORMS_ABUSE_SECRET` | Random 32+ character HMAC secret for source counters; no raw IP storage |
|
|
65
|
+
| `FORMS_SETUP_TOKENS` | Separate tenant-scoped provisioning tokens |
|
|
66
|
+
| `FORMS_FROM` | Authenticated Vitris sender address; never supplied by the browser |
|
|
67
|
+
| `FORMS_SENDER_READY=1` | Operator attestation after domain authentication/account access verification |
|
|
68
|
+
| `FORMS_EMAIL` | Cloudflare Email Service `send_email` binding |
|
|
69
|
+
| `FORMS_TEST_EMAIL`, `FORMS_TEST_RECIPIENT` | Optional restricted operator sink; requires sandbox and authenticated sender |
|
|
70
|
+
| `FORMS_SANDBOX=1` | Prevent live activation on an isolated test backend |
|
|
71
|
+
|
|
72
|
+
Live readiness requires all mail settings, recipients, non-dummy Turnstile keys/secrets and approved HTTPS origins. Test readiness still requires challenge and abuse configuration. Test notifications are rendered/captured in D1 by default; the customer `FORMS_EMAIL` binding is never used for test records. A separately configured sandbox operator sink can send explicitly authorized test messages as described below. Missing settings appear in `forms status` and the leads dashboard and block live configuration/acceptance. The sender-ready flag is an operator attestation, not an automatic DNS or inbox-delivery check.
|
|
73
|
+
|
|
74
|
+
After **separate approval** for a shared-backend rollout, add a restricted binding to its reviewed Wrangler deployment configuration:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"send_email": [{
|
|
79
|
+
"name": "FORMS_EMAIL",
|
|
80
|
+
"allowed_sender_addresses": ["forms@YOUR-VITRIS-DOMAIN"],
|
|
81
|
+
"allowed_destination_addresses": ["APPROVED-RECIPIENT@example.com"]
|
|
82
|
+
}]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Use the structured `send()` builder with a Vitris From address and validated visitor email as `replyTo`. Recipients and field-schema labels come from the server-side acceptance snapshot. The binding must permit those recipients; do not assume an unrestricted binding can send to arbitrary addresses on every plan. Cloudflare's current sending guide requires Cloudflare DNS and sender-domain onboarding with authentication/bounce records. Check SPF, DKIM, DMARC, account availability and recipient restrictions before attesting readiness. Do not replace the existing Gmail/Resend login/operator mail workflows. [Sending setup](https://developers.cloudflare.com/email-service/get-started/send-emails/), [binding restrictions](https://developers.cloudflare.com/email-service/configuration/send-bindings/), [Workers API](https://developers.cloudflare.com/email-service/api/send-emails/workers-api/).
|
|
87
|
+
|
|
88
|
+
As checked October 9, 2026, sending is documented as beta. Arbitrary-recipient sending requires Workers Paid; the account includes 3,000 outbound emails/month, then $0.35/1,000. Verified-destination sends are free under the documented conditions. Include the Workers subscription plus D1 reads/writes/storage in budgeting; the new scheduler runs every five minutes (about 8,640 runs per 30 days) and handles at most 20 notifications per invocation. At low contact-form volume mail usage should normally fit the included allowance, but provider acceptance/bounces can count toward billing. [Email pricing](https://developers.cloudflare.com/email-service/platform/pricing/).
|
|
89
|
+
|
|
90
|
+
Turnstile Free currently permits 20 widgets/account, 10 hostnames/widget and unlimited challenges. Pooling permits several sites per widget; server authorization remains exact per form. Reserve capacity for staging and customer origins instead of allocating a widget per form. [Current Turnstile plans](https://developers.cloudflare.com/turnstile/plans/).
|
|
91
|
+
|
|
92
|
+
## Acceptance, retry and delivery semantics
|
|
93
|
+
|
|
94
|
+
Requests require URL-encoded content, at most 32 KiB including chunked bodies, exact registered form/origin ownership, valid bounded fields and a v4 idempotency UUID. Browser-controlled recipient/sender fields and unknown fields are rejected. Honeypots reject without creating records. D1 conditional UPSERTs enforce 10 attempts/source/tenant and 100 attempts/tenant per ten-minute window atomically; these are fixed-window limits, not sliding limits. Failed challenge attempts consume budget. Keep Cloudflare edge protections for volumetric abuse; per-form validation is not a network-DDoS defense.
|
|
95
|
+
|
|
96
|
+
Siteverify must succeed with the configured action and requesting origin's exact hostname. Tokens are single-use/short-lived; the browser refreshes them after attempts. A token-specific deterministic UUID is used for Siteverify retries. A new challenge token does not reuse the old verification verdict. Accepted tenant/form/idempotency receipts are checked before another challenge verification; matching accepted retries return the existing receipt, while changed values return 409. A database-unique challenge digest also prevents accepted-token reuse with another submission key. [Siteverify contract](https://developers.cloudflare.com/turnstile/get-started/server-side-validation/).
|
|
97
|
+
|
|
98
|
+
The `form_submissions` insert, outbox, compatible production lead and production conversion are one D1 transaction through an insertion trigger. Acknowledgement means durable acceptance, not email delivery. Production conversions are inserted once in D1; test submissions never enter production leads, conversions or Analytics Engine. Both modes preserve all configured fields.
|
|
99
|
+
|
|
100
|
+
The five-minute cron processes bounded batches with conditional claims, five-minute leases, eight attempts and exponential backoff (60 seconds, doubling to a six-hour cap). Abandoned leases are reclaimable; an abandoned final attempt becomes a visible terminal failure. Invalid sender/recipient/configuration errors become terminal immediately. Provider calls have a 30-second processing deadline; timeouts are ambiguous because the binding cannot cancel an in-flight send. The original daily analytics rollup still runs at `0 6 * * *`. Processing does not rely on `waitUntil`.
|
|
101
|
+
|
|
102
|
+
Statuses are `pending`, `processing`, `captured` (test), `accepted` (provider message ID/time), and `failed` (bounded actionable error code). The leads dashboard shows all fields, readiness and notification status, with a separate test view. Retry controls cannot target another tenant. Changing the configured mode pauses unmatched pending jobs; test jobs never become live jobs. Acceptance-time recipients are immutable snapshots; review pending jobs before changing recipient policy.
|
|
103
|
+
|
|
104
|
+
The provider interface receives the stable outbox ID for providers supporting idempotency. The current documented Cloudflare Workers send builder has **no idempotency parameter**; no invented header/key is sent. A crash or ambiguous timeout after provider acceptance but before the database update can cause a duplicate send on retry. A 30-second deadline or lease is not proof that an earlier send was canceled. Terminal manual retries also carry that risk. No exactly-once email or inbox-delivery guarantee is made. `accepted` is distinct from confirmed mailbox delivery; bounce/delivery webhooks are not implemented in v1. Use Cloudflare email logs when investigating provider acceptance and recipient delivery.
|
|
105
|
+
|
|
106
|
+
Leads keep the existing retention policy (no automatic lead deletion). Archiving does not delete PII. Deleting a production lead deletes its submission/receipt/outbox snapshot through a trigger; analytics retain their existing 90-day raw/400-day aggregate policy. Test submissions/captures expire after seven days, and rate counters after their window. Deleting an idempotency receipt removes replay protection for that record; expire data deliberately and rely on fresh challenge validation afterward. Operator setup plans and test screenshots may contain test data; never use customer PII in verification artifacts.
|
|
107
|
+
|
|
108
|
+
## Browser behavior and preservation
|
|
109
|
+
|
|
110
|
+
### Isolated Cloudflare acceptance deployment
|
|
111
|
+
|
|
112
|
+
`src/worker/forms-sandbox.ts` deploys the same submission, management and outbox handlers with only an isolated D1 binding. It requires `FORMS_SANDBOX=1`, exposes no login, customer dashboard, publishing, inbound email or analytics endpoints, and accepts tenant-scoped bearer credentials for configuration/status/retry. Its five-minute cron processes the durable outbox. Use real Turnstile credentials and exact preview hostnames; never deploy the local placeholder resources or dummy secrets remotely.
|
|
113
|
+
|
|
114
|
+
Test mode captures output by default. For an explicitly authorized operator email test, configure a **separate** `FORMS_TEST_EMAIL` send binding restricted by `destination_address` (and an authenticated sender restriction), plus server-side `FORMS_TEST_RECIPIENT`, `FORMS_FROM` and `FORMS_SENDER_READY=1`. This opt-in is permitted only on a sandbox backend. The outbox replaces all snapshotted recipients with the single operator sink and prefixes the subject with `[VITRIS TEST]`; browser fields cannot choose its recipient. Missing sink/sender configuration fails visibly without falling back to the customer binding. Status includes `sandboxMail` readiness. An `accepted` test record means provider acceptance, not inbox delivery. It remains a test submission with zero production leads/conversions and the existing seven-day test retention. Previously captured jobs remain captured; use fresh submissions after mail setup.
|
|
115
|
+
|
|
116
|
+
Example restricted operator binding (replace the authenticated Vitris sender):
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"vars": {
|
|
121
|
+
"FORMS_SANDBOX": "1",
|
|
122
|
+
"FORMS_TEST_RECIPIENT": "operator@example.com",
|
|
123
|
+
"FORMS_FROM": "forms-test@YOUR-VERIFIED-VITRIS-DOMAIN",
|
|
124
|
+
"FORMS_SENDER_READY": "1"
|
|
125
|
+
},
|
|
126
|
+
"send_email": [{
|
|
127
|
+
"name": "FORMS_TEST_EMAIL",
|
|
128
|
+
"destination_address": "operator@example.com",
|
|
129
|
+
"allowed_sender_addresses": ["forms-test@YOUR-VERIFIED-VITRIS-DOMAIN"]
|
|
130
|
+
}]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The October 9 isolated deployment/evidence is under `artifacts/contact-forms/cloud-test-20261009/`. It uses `vitris-forms-sandbox-20261009`, a new D1 database, and the new `dwperrotta-forms-test-20261009` Pages project on the `sandbox` preview branch. The existing `vitris` database, original preserve preview and customer domains are outside this deployment. One real managed widget is shared by all nine route-level contact forms on that exact preview hostname. Its secrets are Worker secrets, never frontend assets. Local provisioning scripts reconcile their named resources on rerun and load Cloudflare credentials without printing them; `.private-secrets.json` is ignored and must stay operator-only.
|
|
135
|
+
|
|
136
|
+
Remote D1 execution exposed a nested `CASE ... END` trigger parsing failure. Migration 0004 now uses equivalent trigger `WHEN` clauses, which passed actual remote Wrangler migration execution as well as local ownership/atomicity tests. No preservation reference or frozen baseline was changed.
|
|
137
|
+
|
|
138
|
+
The shared runtime defers Turnstile until submission, preserves fields, HTML constraints and labels, prevents concurrent requests, retains the retry UUID after an ambiguous failure, and suppresses resubmission of the same successfully accepted values. It provides live status/alert regions and distinct errors for validation, expiry, rate limits, unavailable challenge/backend and timeouts. It claims only saved acceptance; test feedback explicitly says no customer email will be sent. Without JavaScript, a visible `noscript` notice directs visitors to listed contact details, and native POST cannot bypass challenge/idempotency validation.
|
|
139
|
+
|
|
140
|
+
Preservation CSP adds only the configured backend and `https://challenges.cloudflare.com` to the required script/connect/frame directives for connected forms. The verifier's request policy admits only that backend's `/api/leads` and required challenge paths, with controlled responses during UI verification. Old services remain blocked. Resting-page screenshots use the original references and unchanged 0.5% threshold; intentional challenge/submission states are verified separately. Generated-site verification uses the same narrowly mocked challenge/acceptance adapter and blocks other outbound mutations. Passing those mocks does not establish live backend readiness.
|
|
141
|
+
|
|
142
|
+
## Staged rollout and rollback
|
|
143
|
+
|
|
144
|
+
1. Review local evidence under `artifacts/contact-forms/`, including read-only account inspection. The inspected account had an active account token, zero widgets, zero listed Workers and the existing `vitris` D1 database. The configured `vitris-backend` Worker settings lookup returned 404. Resolve the intended deployed Worker/account/resource mapping before any remote change.
|
|
145
|
+
2. Create a separately named sandbox Worker/database using a reviewed copy of the test configuration with real isolated resource IDs. Retain `FORMS_SANDBOX=1`; enable no customer mail binding. Apply migrations there, provision real widgets for exact isolated preview hostnames and execute the test-mode acceptance checks with real Turnstile. Establish actual account Email Service availability and Vitris sender setup separately.
|
|
146
|
+
3. Review permissions, recipient lists, sender restrictions and all field mappings. Back up the existing shared backend/D1. Only after explicit rollout authorization, deploy the additive migration, code and notification cron/binding. Keep every customer form disabled while its asset/configuration migration is staged.
|
|
147
|
+
4. Activate one reviewed tenant/form in `test`, inspect captured output and exact challenge hostname/action, then obtain separate authorization for `live` configuration and customer notifications. No customer-domain migration is part of this forms rollout. Existing preview hosts can remain previews; domains require their own approval/workflow.
|
|
148
|
+
5. Monitor pending age, terminal codes, rate limits, provider acceptance and mail logs. Expand tenant by tenant. Confirm retention and deletion operations before broad activation.
|
|
149
|
+
|
|
150
|
+
Rollback first sets affected forms to `disabled` using the tenant-scoped API, pausing future acceptance and pending mismatched jobs. Preserve D1 leads/outbox for investigation. Restore previously verified disabled preview assets; do not restore an insecure origin-inferred public lead handler. If needed, pause the added notification cron while preserving the daily analytics schedule. Re-enable only after reviewing pending jobs and possible duplicate-send windows. No destructive migration rollback or deletion of old lead history is required.
|
|
151
|
+
|
|
152
|
+
## Verification commands
|
|
153
|
+
|
|
154
|
+
```powershell
|
|
155
|
+
node --experimental-strip-types --test src/contact-forms.test.ts src/contact-forms-operations.test.ts src/contact-forms-browser.test.ts src/lead-forms.test.ts src/preserve.test.ts
|
|
156
|
+
npm run typecheck
|
|
157
|
+
npm run build:cli
|
|
158
|
+
npm run verify:package
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Tests use the installed Wrangler/Miniflare D1 simulator and real migrations; mail providers are fakes and browser challenge execution/Siteverify are controlled fixtures. No remote migrations, customer messages, production-backend changes or customer-domain changes are part of this implementation verification.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Distribution, client starters, and migration
|
|
2
|
+
|
|
3
|
+
## Repository boundaries
|
|
4
|
+
|
|
5
|
+
`@tryvitris/website-harness` is the reusable package maintained here. `vitris` is the command. The workflow graph schedules agent, tool, and critic stages; skills and references supply stage-specific knowledge. The compiler builds static websites. The optional backend Worker supplies owner administration, leads, and analytics.
|
|
6
|
+
|
|
7
|
+
Generate a separate directory for each customer with `vitris site create`. Open that directory in the coding agent, initialize its Git repository, and commit its authored source and lockfile. Keep customer secrets and captures out of the public harness repository. A second starter repository is unnecessary: `templates/site` is the versioned starter shipped with the npm package.
|
|
8
|
+
|
|
9
|
+
New sites depend on the exact creating package version, avoiding paths into an ephemeral `npx` cache. Before a registry release, pass `--harness` with a tarball path or an explicit `file:` dependency. Both paths are relative to the generated site directory. Registry and tarball installations include bundled JavaScript commands and APIs; consumers do not need to strip TypeScript inside `node_modules`.
|
|
10
|
+
|
|
11
|
+
## Terminology and compatibility
|
|
12
|
+
|
|
13
|
+
| Current name | Accepted legacy name |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| `@tryvitris/website-harness` | Existing `@tryvitris/harness`, `@vitris/harness` and `@vitris/kernel` installations continue running their installed version; migrate dependencies explicitly |
|
|
16
|
+
| `--harness`, `harnessSpec` | `--kernel`, `kernelSpec` |
|
|
17
|
+
| `VITRIS_HARNESS` | `VITRIS_KERNEL` |
|
|
18
|
+
| `launch.json.backendOrigin`, `--backend-origin` | `launch.json.kernelOrigin`, `--kernel-origin` |
|
|
19
|
+
| `VITRIS_BACKEND_ORIGIN` | `KERNEL_ORIGIN` |
|
|
20
|
+
| Workflow command `{harness}` | `{kernel}` |
|
|
21
|
+
| HTML `data-backend` | The compiler also emits `data-kernel`; the beacon accepts both |
|
|
22
|
+
|
|
23
|
+
At the same configuration level, current names take precedence. CLI build overrides environment, which overrides launch configuration. Internal variable names, historical reports, and calibration issuer identifiers may retain `kernel`; changing evidence identity or signatures is not part of a naming migration.
|
|
24
|
+
|
|
25
|
+
## Migrate an existing client
|
|
26
|
+
|
|
27
|
+
Stop its workflow first. From the harness checkout, preview changes:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node bin/vitris-migrate-site.js --site ../acme --harness ../vitris-harness/tryvitris-website-harness-0.1.0-beta.6.tgz
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Add `--apply` to perform the displayed changes. The command backs up affected files under the client's `agent-backups/`, renames the package dependency and known script paths, and converts the backend origin key. Conflicting old/new origins fail before writes. Client pages, components, media, secrets, existing lockfile, and workflow state are preserved. Repeating it makes no further edits.
|
|
34
|
+
|
|
35
|
+
Then run inside the client directory:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install
|
|
39
|
+
npm run refresh-agent
|
|
40
|
+
npm run build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Review the migration diff and regenerated lockfile before committing. `refresh-agent` now plans and applies only managed instruction files whose previous hashes are known. Older copied kits without provenance keep customized or unknown files and report conflicts. Existing graph progress is retained; a graph-version change is deferred for explicit audit. Use `vitris upgrade --site . --plan` to inspect the plan and `--apply` to apply an unchanged plan. This managed-kit operation does not install npm dependencies. Custom imports of `@vitris/harness` or `@vitris/kernel` must also be updated; the migration only handles known configuration and command paths. An npm alias under the old dependency name can temporarily support a custom integration. No compatibility package has been published under the old name.
|
|
44
|
+
|
|
45
|
+
## Backend deployment identity
|
|
46
|
+
|
|
47
|
+
The new default Worker name is `vitris-backend`. This does not rename an existing remote Worker. Existing Vitris deployments must continue using the deployed name and resource bindings until an explicit service cutover. For example, use the old Worker name with Wrangler's `--name vitris-kernel` override while preserving its existing configuration. Keep the existing backend URL in client launch settings during that transition.
|
|
48
|
+
|
|
49
|
+
The checked-in Wrangler examples contain placeholder resource identifiers. Provision your own Cloudflare bindings and keep local account configuration outside version control; see [Cloudflare setup](CLOUDFLARE.md). Static client builds do not require backend resources. Preparing this source does not change any remote Worker, DNS record, binding, or client deployment.
|
|
50
|
+
|
|
51
|
+
## First migrations from Amazon
|
|
52
|
+
|
|
53
|
+
1. Generate a client repo with `--from` pointing at its current website. Capture pages, important URLs, business facts, and original brand media while the old site remains available.
|
|
54
|
+
2. Build through the workflow to a verified local preview. Preserve logos, founder/staff identity, and unique project imagery; use inspected stock for appropriate gaps. Confirm content and forms with the customer.
|
|
55
|
+
3. Verify a hosted preview, including URL coverage, redirects, assets, forms, and mobile behavior. Keep email/MX records separate from website hosting changes.
|
|
56
|
+
4. Schedule the domain cutover after acceptance, record rollback settings, and check the live site before retiring old hosting.
|
|
57
|
+
|
|
58
|
+
These are rollout steps, not completed migrations. This package does not automatically transfer Amazon infrastructure or DNS.
|
|
59
|
+
|
|
60
|
+
## Public release preparation
|
|
61
|
+
|
|
62
|
+
The owner selected MIT and public npm publication under `@tryvitris/website-harness`. The `prepublishOnly` guard verifies the package identity, public registry and visibility, beta dist-tag, and packed-release audit before allowing publication. See SECURITY.md for the release audit and CLOUDFLARE.md for user-owned infrastructure.
|
|
63
|
+
|
|
64
|
+
MIT licensing and intended repository metadata are included. Before public release, review third-party provenance and dependency notices, confirm npm scope ownership/authentication, and repeat the source, Git-history, and tarball credential checks. The dedicated `vitris-harness` repository starts with fresh history. Keep the original private development repository and customer repositories private. Creating a remote repository, changing visibility, and publishing npm are separate explicitly authorized operations.
|
|
65
|
+
|
|
66
|
+
Run `npm run test:freeze` after final source edits. It checks type safety, tests, package installation, generated-site installation and build, public API imports, first-stage preparation, and restoration of the source archive. Use the immutable result for the official pilot. Publishing and production deployment are separate operations.
|
|
67
|
+
|
|
68
|
+
## Optional corrected teaching data
|
|
69
|
+
|
|
70
|
+
The core npm package includes the original v1/v2 teaching studies and reference metadata. The larger immutable corrected studies (v3/v4, releases 2026-10-06.1 and 2026-10-06.2) are optional data, supplied separately from the core beta. They retain their original bytes and hashes; the package does not substitute reduced images or waive inspection. Set VITRIS_REFERENCE_DATA to a verified data root containing design-system/compositions/v3 and v4 before opting into those releases through launch.json.designReferences. A source checkout can serve as that root. Missing data produces an explicit error. The ordinary new-site workflow does not opt into those corrected teaching releases.
|