@warpgogol/werkstatt-shared 0.14.1 → 0.16.0
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/README.md +23 -15
- package/README.uk.md +1 -1
- package/package.json +534 -766
- package/src/{share/agent → agent}/api-catalog.ts +14 -1
- package/src/{share/agent → agent}/ard-catalog.ts +6 -1
- package/src/{share/agent → agent}/dns-aid.test.ts +2 -2
- package/src/agent/guidance.ts +52 -0
- package/src/agent/health.ts +68 -0
- package/src/{share/agent → agent}/index.ts +5 -1
- package/src/{share/agent → agent}/manifest.ts +83 -6
- package/src/{share/agent → agent}/openapi.ts +97 -4
- package/src/agent/receipt.ts +123 -0
- package/src/{share/agent → agent}/search.test.ts +3 -0
- package/src/{share/agent → agent}/search.ts +31 -5
- package/src/{share → agent}/tests/api-catalog.test.ts +8 -2
- package/src/{share → agent}/tests/ard-catalog.test.ts +11 -2
- package/src/{share → agent}/tests/capability.test.ts +1 -1
- package/src/{share → agent}/tests/fleet-catalog.test.ts +1 -1
- package/src/{share → agent}/tests/knowledge.test.ts +2 -2
- package/src/{share → agent}/tests/manifest.test.ts +72 -1
- package/src/{share → agent}/tests/mcp-card.test.ts +6 -2
- package/src/{share → agent}/tests/openapi.test.ts +119 -2
- package/src/{share → agent}/tests/proof.test.ts +1 -1
- package/src/{share → attribution}/material-credits.ts +4 -4
- package/src/{share → checks}/check-hints.ts +6 -1
- package/src/checks/index.ts +4 -1
- package/src/checks/lib/astro-site-url.ts +6 -1
- package/src/checks/lib/i18n.ts +14 -0
- package/src/checks/result-helpers.ts +2 -2
- package/src/checks/tests/remediation-auto-populate.test.ts +1 -1
- package/src/{share → client-scripts}/counter-utils.ts +6 -2
- package/src/{share/scripts → client-scripts}/external-link-qr.ts +11 -16
- package/src/{share/scripts → client-scripts}/external-links.ts +12 -1
- package/src/{share/scripts → client-scripts}/gsap-counter.ts +8 -3
- package/src/client-scripts/index.ts +35 -0
- package/src/{share/scripts → client-scripts}/inline-number-animation.ts +1 -1
- package/src/{share/scripts → client-scripts}/lenis.ts +6 -1
- package/src/{share/scripts → client-scripts}/lordicon.ts +6 -1
- package/src/{share/scripts → client-scripts}/orchestrator.ts +10 -1
- package/src/{share/scripts → client-scripts}/scheduler.ts +6 -1
- package/src/client-scripts/scroll-spy.ts +106 -0
- package/src/client-scripts/tests/orchestrator.test.ts +47 -0
- package/src/client-scripts/tests/scroll-spy.test.ts +204 -0
- package/src/{share/scripts → client-scripts/tests}/video-player.test.ts +51 -31
- package/src/component/contracts.ts +206 -0
- package/src/component/index.ts +13 -0
- package/src/{share → content}/content-reference.ts +3 -3
- package/src/{share/content → content}/entity-id.ts +6 -3
- package/src/content/index.ts +3 -0
- package/src/{share/content → content}/merge.ts +6 -1
- package/src/content/system-manifest.test.ts +107 -0
- package/src/content/system-manifest.ts +12 -94
- package/src/{share → content}/tests/resolve-field-path.test.ts +1 -1
- package/src/{share → content}/tests/substitute-deep.test.ts +1 -1
- package/src/content-discipline/index.ts +19 -0
- package/src/{share/content-discipline → content-discipline}/parsers.ts +2 -2
- package/src/{share/env.d.ts → env.d.ts} +6 -3
- package/src/fingerprint/canonical-json.ts +731 -0
- package/src/fingerprint/index.ts +14 -0
- package/src/fingerprint/primitives.ts +72 -0
- package/src/{share/i18n → i18n}/localization.ts +6 -2
- package/src/integration/adapters.ts +10 -71
- package/src/integration/dispatch.ts +1 -1
- package/src/integration/funnel.ts +6 -1
- package/src/integration/idempotency.ts +88 -0
- package/src/integration/index.ts +105 -4
- package/src/integration/lagebild-destination-adapter.ts +108 -0
- package/src/integration/lagebild-ingress.ts +7 -12
- package/src/integration/orchestration.ts +11 -10
- package/src/integration/tests/deliver-event.test.ts +1 -1
- package/src/integration/tests/dispatch.test.ts +4 -4
- package/src/integration/tests/hub-runtime.test.ts +22 -14
- package/src/integration/tests/idempotency.test.ts +81 -0
- package/src/integration/vitest.config.ts +1 -0
- package/src/kernel/desired-state.ts +227 -0
- package/src/kernel/diagnostic.ts +289 -0
- package/src/kernel/drift-guard.ts +166 -0
- package/src/kernel/fs-atomic.ts +131 -0
- package/src/kernel/index.ts +22 -0
- package/src/kernel/tests/drift-guard.test.ts +112 -0
- package/src/kernel/tests/fs-atomic.test.ts +150 -0
- package/src/kernel/tests/workpiece-env.test.ts +44 -0
- package/src/kernel/tests/workspace-io.test.ts +187 -0
- package/src/kernel/types.ts +518 -0
- package/src/kernel/workpiece-env.ts +48 -0
- package/src/kernel/workspace-io.ts +248 -0
- package/src/{share → knowledge}/tests/claim.test.ts +1 -1
- package/src/{share → knowledge}/tests/derivation.test.ts +1 -1
- package/src/{share → knowledge}/tests/freshness.test.ts +1 -1
- package/src/{share → knowledge}/tests/ledger.test.ts +1 -1
- package/src/{share → knowledge}/tests/plan.test.ts +1 -1
- package/src/{share → knowledge}/tests/source.test.ts +1 -1
- package/src/legal/index.ts +15 -0
- package/src/{share/middleware → middleware}/access-protection.ts +11 -8
- package/src/{share/middleware → middleware}/language-redirect.ts +3 -0
- package/src/{share → node}/dev-props-validator.ts +6 -1
- package/src/{share → node}/import-scan.ts +23 -3
- package/src/{share → node}/semantic/derived-prices-loader.ts +4 -2
- package/src/{share → node}/semantic/markdown-twin-provenance.ts +1 -1
- package/src/{share/semantic → node}/tests/derived-prices-loader.test.ts +14 -1
- package/src/{share/semantic → node}/tests/markdown-twin-provenance.test.ts +1 -1
- package/src/observability/env-resolver.ts +6 -1
- package/src/observability/index.ts +14 -1
- package/src/observability/otlp-converter.ts +6 -1
- package/src/observability/otlp-transport.ts +6 -1
- package/src/observability/pipeline-log.ts +81 -0
- package/src/observability/pusher.ts +6 -1
- package/src/observability/redact.ts +6 -1
- package/src/observability/typed-refs.ts +6 -2
- package/src/observability/vitest.config.ts +1 -0
- package/src/{share → offers}/formula-eval.ts +3 -3
- package/src/{share → offers}/tests/formula-eval.test.ts +2 -2
- package/src/onboarding/index.ts +1 -0
- package/src/{share → onboarding}/tests/onboarding-yaml.test.ts +1 -1
- package/src/ontology/archetype-registry.ts +6 -1
- package/src/ontology/archetypes/index.json +33 -1
- package/src/ontology/archetypes/index.yaml +27 -1
- package/src/ontology/archetypes/sections/entity-grid.yaml +46 -0
- package/src/ontology/archetypes/sections/exit-diagram.yaml +43 -0
- package/src/ontology/biome-token-projection.ts +6 -1
- package/src/ontology/capabilities/lead.prepare.yaml +44 -0
- package/src/ontology/capabilities/lead.submit.yaml +20 -3
- package/src/ontology/cosmic/index.ts +6 -1
- package/src/ontology/cosmic/moon-catalog.ts +6 -1
- package/src/ontology/cosmic/planet-catalog.ts +6 -1
- package/src/ontology/cosmic/star-catalog.ts +6 -1
- package/src/ontology/enums.ts +6 -1
- package/src/ontology/external-surfaces/index.ts +1 -1
- package/src/ontology/index.ts +6 -2
- package/src/ontology/manifest.ts +7 -4
- package/src/ontology/operations/artifact-store.ts +45 -0
- package/src/ontology/operations/dht.ts +98 -0
- package/src/ontology/operations/handoff.ts +92 -0
- package/src/ontology/operations/index.ts +193 -1
- package/src/ontology/operations/leitstand.ts +99 -0
- package/src/ontology/operations/materialization.ts +90 -0
- package/src/ontology/operations/mission.ts +111 -0
- package/src/ontology/operations/naming-policy.ts +132 -0
- package/src/ontology/operations/notausgang.ts +108 -0
- package/src/ontology/operations/release.ts +121 -0
- package/src/ontology/operations/sternsystem.ts +192 -0
- package/src/ontology/operations/werkstatt.ts +48 -0
- package/src/ontology/schemas/biome.ts +7 -2
- package/src/ontology/schemas/capability.ts +56 -4
- package/src/ontology/schemas/constellation.ts +6 -1
- package/src/ontology/schemas/index.ts +6 -2
- package/src/ontology/schemas/manifest-resolver.ts +6 -1
- package/src/ontology/schemas/page-entry.ts +9 -5
- package/src/ontology/schemas/system/growth.ts +6 -1
- package/src/ontology/schemas/system/manifest.ts +40 -1
- package/src/ontology/schemas/system/page-output.ts +7 -6
- package/src/ontology/schemas/system/text.ts +15 -0
- package/src/ontology/schemas/system.ts +6 -2
- package/src/ontology/shared-section-props/body-fragments.ts +2 -0
- package/src/ontology/tests/sternsystem-owner.test.ts +1 -1
- package/src/ontology/vitest.config.ts +1 -0
- package/src/{share → page}/page.ts +13 -9
- package/src/{share → page}/tests/dev-props-validator.test.ts +1 -1
- package/src/{share → page}/tests/hero-section-numbering-parity.test.ts +1 -1
- package/src/passport/claim-sign.ts +120 -0
- package/src/passport/index.ts +9 -1
- package/src/passport/key-rotate.ts +10 -2
- package/src/passport/schema.ts +6 -1
- package/src/passport/sign.ts +8 -3
- package/src/passport/vitest.config.ts +1 -0
- package/src/pbt/index.test.ts +95 -0
- package/src/pbt/index.ts +251 -0
- package/src/plugin/plugin-contract.ts +2 -2
- package/src/{share → policy}/entitlement.ts +24 -4
- package/src/{share → policy}/feature-policy.ts +8 -3
- package/src/{share → policy}/visibility.ts +7 -2
- package/src/redirects/redirects.ts +117 -0
- package/src/{share → redirects/tests}/redirects.test.ts +1 -1
- package/src/remediation/remediation-catalog.ts +316 -0
- package/src/{share/routes → routes}/template-filter.ts +1 -1
- package/src/{share → runtime}/runtime-context.ts +7 -2
- package/src/{share → runtime}/shared-context.ts +1 -1
- package/src/{share/schemas → schemas}/claims.ts +2 -2
- package/src/{share/schemas → schemas}/effects.ts +6 -1
- package/src/{share/schemas → schemas}/features.ts +1 -1
- package/src/{share/schemas → schemas}/index.ts +3 -3
- package/src/{share/schemas → schemas}/navigation.ts +6 -1
- package/src/{share/schemas → schemas}/page-base.ts +6 -2
- package/src/{share/schemas → schemas}/person.ts +1 -1
- package/src/{share/schemas → schemas}/standard-list-item.ts +1 -1
- package/src/{share → sections}/rfc0042-utils.ts +1 -1
- package/src/{share/semantic → semantic}/block-extractors/index.ts +20 -1
- package/src/{share/semantic → semantic}/business-projection.ts +95 -1
- package/src/semantic/canonical-uri.ts +74 -0
- package/src/{share/semantic → semantic}/extract.ts +100 -1
- package/src/semantic/fact-extraction.test.ts +47 -0
- package/src/semantic/fact-extraction.ts +46 -0
- package/src/semantic/freshness.ts +67 -0
- package/src/{share/semantic → semantic}/ids.ts +6 -1
- package/src/{share/semantic → semantic}/index.ts +9 -2
- package/src/{share/semantic → semantic}/jsonld/breadcrumb.ts +6 -2
- package/src/{share/semantic → semantic}/jsonld/context.ts +6 -2
- package/src/{share/semantic → semantic}/jsonld/faq.ts +6 -2
- package/src/{share/semantic → semantic}/jsonld/initiative.ts +6 -1
- package/src/{share/semantic → semantic}/jsonld/organization.ts +6 -1
- package/src/{share/semantic → semantic}/jsonld/person.ts +6 -2
- package/src/{share/semantic → semantic}/jsonld/service.ts +6 -2
- package/src/semantic/jsonld/shared.ts +36 -0
- package/src/semantic/jsonld/types.ts +24 -0
- package/src/{share/semantic → semantic}/jsonld/webpage.ts +6 -1
- package/src/semantic/jsonld/website.ts +32 -0
- package/src/{share/semantic → semantic}/jsonld.ts +6 -1
- package/src/{share/semantic → semantic}/llms.ts +51 -5
- package/src/{share/semantic → semantic}/models.ts +26 -38
- package/src/{share/semantic → semantic}/organization-profile.ts +3 -0
- package/src/{share/semantic → semantic}/page-builders/markdown-page.ts +6 -3
- package/src/{share/semantic → semantic}/page-utils.ts +6 -3
- package/src/{share/tests/breadcrumbs.test.ts → semantic/tests/breadcrumbs-0229.test.ts} +1 -1
- package/src/{share → semantic}/tests/build-page-price-markers.test.ts +2 -2
- package/src/{share/semantic → semantic}/tests/business-projection.test.ts +179 -0
- package/src/semantic/tests/canonical-uri.test.ts +68 -0
- package/src/{share/semantic → semantic}/tests/extract.test.ts +83 -0
- package/src/semantic/tests/freshness.pbt.test.ts +108 -0
- package/src/{share/tests/image-sitemap.test.ts → semantic/tests/image-sitemap-0150.test.ts} +1 -1
- package/src/{share → semantic}/tests/jsonld-service.test.ts +2 -2
- package/src/{share → semantic}/tests/jsonld-video.test.ts +3 -3
- package/src/{share → semantic}/tests/jsonld-webpage.test.ts +3 -3
- package/src/{share → semantic}/tests/llms-0789.test.ts +2 -2
- package/src/{share/semantic → semantic}/tests/llms.test.ts +46 -0
- package/src/{share → semantic}/tests/organization-jsonld.test.ts +3 -3
- package/src/{share/tests/output-projection.test.ts → semantic/tests/output-projection-0143.test.ts} +1 -1
- package/src/{share/tests/price-marker-resolver.test.ts → semantic/tests/price-marker-resolver-0767.test.ts} +2 -2
- package/src/{share/semantic → semantic}/tests/price-marker-resolver.test.ts +4 -2
- package/src/semantic/tests/project-claims.pbt.test.ts +60 -0
- package/src/{share/semantic → semantic}/tests/split-sentences.test.ts +1 -1
- package/src/{share → semantic}/tests/twin-path.test.ts +1 -1
- package/src/signing/index.ts +15 -0
- package/src/signing/key.ts +139 -0
- package/src/signing/sign.ts +66 -0
- package/src/signing/types.ts +29 -0
- package/src/{share/slug → slug}/slug-url.ts +4 -1
- package/src/stack/run-tool.ts +106 -0
- package/src/stack/stack-checks.ts +124 -0
- package/src/stack/tests/run-tool.test.ts +138 -0
- package/src/stack/tests/stack-checks.test.ts +141 -0
- package/src/stack/tests/walk-files.test.ts +131 -0
- package/src/stack/walk-files.ts +114 -0
- package/src/surface/blueprint.ts +342 -66
- package/src/surface/decision-composer.ts +6 -1
- package/src/surface/geo.ts +6 -1
- package/src/surface/index.ts +11 -7
- package/src/surface/types.ts +2 -2
- package/src/surface/vitest.config.ts +1 -0
- package/src/tests/signing-core.test.ts +129 -0
- package/src/{share → text}/css-value-normalize.ts +6 -1
- package/src/text/string-utils.ts +24 -0
- package/src/{share → text}/tests/text-normalize.test.ts +5 -0
- package/src/{share → text}/text-normalize.ts +4 -3
- package/src/{share → text}/wrap-inline-numbers.ts +1 -1
- package/src/types/axiom-study.d.ts +36 -0
- package/src/types/hls-js-light.d.ts +21 -0
- package/src/types/qrcode-browser.d.ts +23 -0
- package/src/typography/fix.pbt.test.ts +208 -0
- package/src/typography/fix.ts +148 -0
- package/src/typography/index.ts +54 -0
- package/src/typography/locale-defaults.ts +97 -0
- package/src/typography/rules-tier1.test.ts +459 -0
- package/src/typography/rules-tier1.ts +925 -0
- package/src/typography/rules-tier2-locale.pbt.test.ts +190 -0
- package/src/typography/rules-tier2-locale.test.ts +286 -0
- package/src/typography/rules-tier2-locale.ts +399 -0
- package/src/typography/rules-tier2-structure.test.ts +330 -0
- package/src/typography/rules-tier2-structure.ts +378 -0
- package/src/typography/rules-tier3-advisory.test.ts +290 -0
- package/src/typography/rules-tier3-advisory.ts +239 -0
- package/src/typography/text-surface.test.ts +244 -0
- package/src/typography/text-surface.ts +448 -0
- package/src/index.ts +0 -14
- package/src/integration/port-barrel.ts +0 -105
- package/src/share/agent/tests/api-catalog.test.ts +0 -8
- package/src/share/agent/tests/ard-catalog.test.ts +0 -8
- package/src/share/agent/tests/capability.test.ts +0 -14
- package/src/share/agent/tests/fleet-catalog.test.ts +0 -15
- package/src/share/agent/tests/knowledge.test.ts +0 -20
- package/src/share/agent/tests/manifest.test.ts +0 -9
- package/src/share/agent/tests/mcp-card.test.ts +0 -8
- package/src/share/agent/tests/openapi.test.ts +0 -8
- package/src/share/agent/tests/proof.test.ts +0 -15
- package/src/share/content/index.ts +0 -16
- package/src/share/content-discipline/index.ts +0 -14
- package/src/share/index.ts +0 -86
- package/src/share/knowledge/tests/claim.test.ts +0 -11
- package/src/share/knowledge/tests/derivation.test.ts +0 -30
- package/src/share/knowledge/tests/freshness.test.ts +0 -18
- package/src/share/knowledge/tests/ledger.test.ts +0 -35
- package/src/share/knowledge/tests/plan.test.ts +0 -19
- package/src/share/knowledge/tests/source.test.ts +0 -19
- package/src/share/legal/index.ts +0 -1
- package/src/share/redirects.ts +0 -54
- package/src/share/remediation/remediation-catalog.ts +0 -196
- package/src/share/scripts/index.ts +0 -26
- package/src/share/scripts/tests/orchestrator.test.ts +0 -8
- package/src/share/semantic/jsonld/shared.ts +0 -31
- package/src/share/semantic/jsonld/types.ts +0 -19
- package/src/share/semantic/jsonld/website.ts +0 -27
- package/src/share/string-utils.ts +0 -19
- package/src/share/types/axiom-study.d.ts +0 -22
- package/src/share/types/hls-js-light.d.ts +0 -16
- package/src/share/types/qrcode-browser.d.ts +0 -18
- package/src/share/utility-registry.yaml +0 -50
- package/src/share/vitest.config.ts +0 -8
- package/src/surface/blueprint-schema.ts +0 -314
- package/src/surface/blueprint-types.ts +0 -256
- /package/src/{share/agent → agent}/capability.ts +0 -0
- /package/src/{share/agent → agent}/dns-aid.ts +0 -0
- /package/src/{share/agent → agent}/fleet-catalog.ts +0 -0
- /package/src/{share/agent → agent}/knowledge.ts +0 -0
- /package/src/{share/agent → agent}/mcp-card.ts +0 -0
- /package/src/{share/agent → agent}/omit-empty.ts +0 -0
- /package/src/{share/agent → agent}/proof.ts +0 -0
- /package/src/{share/agent → agent}/tests/omit-empty.test.ts +0 -0
- /package/src/{share → attribution}/attribution-display.ts +0 -0
- /package/src/{share/scripts → client-scripts}/gsap-mountain-journey.ts +0 -0
- /package/src/{share/scripts → client-scripts}/gsap-parallax.ts +0 -0
- /package/src/{share/scripts → client-scripts}/gsap-reveal.ts +0 -0
- /package/src/{share/scripts → client-scripts}/gsap-stagger.ts +0 -0
- /package/src/{share/scripts → client-scripts}/live-photos.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/external-link-qr.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/external-links.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/gsap-counter.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/gsap-mountain-journey.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/gsap-parallax.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/gsap-reveal.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/gsap-stagger.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/inline-number-animation.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/lenis.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/live-photos.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/lordicon.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/tests/scheduler.test.ts +0 -0
- /package/src/{share/scripts → client-scripts}/video-player.ts +0 -0
- /package/src/{share/content → content}/resolve-field-path.ts +0 -0
- /package/src/{share/content → content}/substitute-deep.ts +0 -0
- /package/src/{share → content}/tests/content-ref-index.test.ts +0 -0
- /package/src/{share/content-discipline → content-discipline}/types.ts +0 -0
- /package/src/{share → image-provider}/image-provider.ts +0 -0
- /package/src/{share/knowledge → knowledge}/claim.ts +0 -0
- /package/src/{share/knowledge → knowledge}/derivation.ts +0 -0
- /package/src/{share/knowledge → knowledge}/freshness.ts +0 -0
- /package/src/{share/knowledge → knowledge}/index.ts +0 -0
- /package/src/{share/knowledge → knowledge}/ledger.ts +0 -0
- /package/src/{share/knowledge → knowledge}/plan.ts +0 -0
- /package/src/{share/knowledge → knowledge}/source.ts +0 -0
- /package/src/{share/legal → legal}/translation-policy.ts +0 -0
- /package/src/{share/middleware → middleware}/tests/access-protection.test.ts +0 -0
- /package/src/{share → node}/fs/index.ts +0 -0
- /package/src/{share/tests/markdown-twin-provenance.test.ts → node/tests/markdown-twin-provenance-0613.test.ts} +0 -0
- /package/src/{share → offers}/offer-capacity.ts +0 -0
- /package/src/{share/onboarding-yaml/index.ts → onboarding/yaml.ts} +0 -0
- /package/src/{share → ontology}/tests/ontology-role-by-cosmic-name.test.ts +0 -0
- /package/src/{share/routes → routes}/tests/template-filter.test.ts +0 -0
- /package/src/{share/schemas → schemas}/claim-records.ts +0 -0
- /package/src/{share/schemas → schemas}/horizontal-align.ts +0 -0
- /package/src/{share/schemas → schemas}/icon-color.ts +0 -0
- /package/src/{share/schemas → schemas}/live-photo.ts +0 -0
- /package/src/{share/schemas → schemas}/material-credit.ts +0 -0
- /package/src/{share/schemas → schemas}/media.ts +0 -0
- /package/src/{share/schemas → schemas}/participant.ts +0 -0
- /package/src/{share/schemas → schemas}/print.ts +0 -0
- /package/src/{share/schemas → schemas}/section-background.ts +0 -0
- /package/src/{share/schemas → schemas}/section-body.ts +0 -0
- /package/src/{share/schemas → schemas}/section-cards.ts +0 -0
- /package/src/{share/schemas → schemas}/section-cta.ts +0 -0
- /package/src/{share/schemas → schemas}/section-header.ts +0 -0
- /package/src/{share/schemas → schemas}/section-image.ts +0 -0
- /package/src/{share/schemas → schemas}/section-motion.ts +0 -0
- /package/src/{share/schemas → schemas}/section-shell.ts +0 -0
- /package/src/{share/schemas → schemas}/section-stats.ts +0 -0
- /package/src/{share/schemas → schemas}/site-background.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/claim-records.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/claims.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/effects.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/features.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/horizontal-align.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/icon-color.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/live-photo.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/material-credit.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/media.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/navigation.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/page-base.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/participant.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/person.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/print.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-background.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-body.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-cards.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-cta.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-header.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-image.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-motion.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-shell.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/section-stats.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/site-background.test.ts +0 -0
- /package/src/{share/schemas → schemas}/tests/standard-list-item.test.ts +0 -0
- /package/src/{share/semantic → semantic}/ai.ts +0 -0
- /package/src/{share/semantic → semantic}/block-extraction.ts +0 -0
- /package/src/{share/semantic → semantic}/breadcrumbs.ts +0 -0
- /package/src/{share/semantic → semantic}/build-page.ts +0 -0
- /package/src/{share/semantic → semantic}/feed.ts +0 -0
- /package/src/{share/semantic → semantic}/image-sitemap.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/article.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/collection-list.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/article.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/breadcrumb.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/collection-list.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/faq.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/initiative.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/organization.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/person.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/service.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/shared.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/video.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/webpage.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/tests/website.test.ts +0 -0
- /package/src/{share/semantic → semantic}/jsonld/video.ts +0 -0
- /package/src/{share/semantic → semantic}/llms-policy.ts +0 -0
- /package/src/{share/semantic → semantic}/markdown-hygiene.ts +0 -0
- /package/src/{share/semantic → semantic}/output-projection.ts +0 -0
- /package/src/{share/semantic → semantic}/page-markdown.ts +0 -0
- /package/src/{share/semantic → semantic}/price-marker-resolver.ts +0 -0
- /package/src/{share/semantic → semantic}/robots.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/ai.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/block-extraction.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/breadcrumbs.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/build-page.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/feed.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/helpers.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/ids.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/image-sitemap.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/jsonld.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/llms-policy.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/markdown-hygiene.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/markdown-page.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/organization-profile.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/output-projection.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/page-markdown.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/page-utils.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/robots.test.ts +0 -0
- /package/src/{share/semantic → semantic}/tests/update-stamp.test.ts +0 -0
- /package/src/{share/semantic → semantic}/update-stamp.ts +0 -0
- /package/src/{share/slug → slug}/heading-slugger.ts +0 -0
- /package/src/{share/slug → slug}/index.ts +0 -0
- /package/src/{share/slug → slug}/slug-id.ts +0 -0
- /package/src/{share/slug → slug}/strategies.ts +0 -0
- /package/src/{share/slug → slug}/tests/slug.test.ts +0 -0
- /package/src/{share → text}/tests/text-normalize.pbt.test.ts +0 -0
- /package/src/{share → text}/text-position.ts +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>
|
|
4
|
+
RFC-0362: Zod schemas for Werkstatt consistency primitives — lock files and
|
|
5
|
+
operation records. These schemas are the machine-checkable contract for all
|
|
6
|
+
Werkstatt lock and idempotency operations.
|
|
7
|
+
</purpose>
|
|
8
|
+
<non-goals>
|
|
9
|
+
<item>Do not perform file IO — pure shape only.</item>
|
|
10
|
+
<item>Do not define hash-chain Bordbuch format — that is RFC-0276/RFC-0355.</item>
|
|
11
|
+
</non-goals>
|
|
12
|
+
</MODULE_CONTRACT>
|
|
13
|
+
<CHANGE_SUMMARY>
|
|
14
|
+
<item>RFC-0362: initial Werkstatt schemas (WerkstattLock, WerkstattOperationRecord).</item>
|
|
15
|
+
</CHANGE_SUMMARY>
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
|
|
20
|
+
export const werkstattLockSchema = z.object({
|
|
21
|
+
schemaVersion: z.literal("1.0.0"),
|
|
22
|
+
scope: z.string().min(1),
|
|
23
|
+
operationId: z.string().min(1),
|
|
24
|
+
command: z.string().min(1),
|
|
25
|
+
owner: z.string().min(1),
|
|
26
|
+
pid: z.number().int(),
|
|
27
|
+
startedAt: z.string().datetime(),
|
|
28
|
+
heartbeatAt: z.string().datetime(),
|
|
29
|
+
timeoutSeconds: z.number().positive(),
|
|
30
|
+
depth: z.number().int().positive().optional(),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export const werkstattOperationRecordSchema = z.object({
|
|
34
|
+
schemaVersion: z.literal("1.0.0"),
|
|
35
|
+
operationId: z.string().min(1),
|
|
36
|
+
command: z.string().min(1),
|
|
37
|
+
scopes: z.array(z.string().min(1)),
|
|
38
|
+
state: z.enum(["started", "completed", "failed"]),
|
|
39
|
+
startedAt: z.string().datetime(),
|
|
40
|
+
completedAt: z.string().datetime().nullable(),
|
|
41
|
+
inputHash: z.string().min(1),
|
|
42
|
+
resultHash: z.string().nullable(),
|
|
43
|
+
artifacts: z.array(z.string()),
|
|
44
|
+
error: z.string().nullable(),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export type WerkstattLock = z.infer<typeof werkstattLockSchema>;
|
|
48
|
+
export type WerkstattOperationRecord = z.infer<typeof werkstattOperationRecordSchema>;
|
|
@@ -14,9 +14,14 @@ Applied via html[data-biome="<id>"] in the cascade layer stack.
|
|
|
14
14
|
</non-goals>
|
|
15
15
|
</MODULE_CONTRACT>
|
|
16
16
|
<CHANGE_SUMMARY>
|
|
17
|
-
<item>Wave 1 (RFC-0025): Initial creation.</item>
|
|
18
17
|
<item>RFC-0071: Replace narrow token overrides with the extended biome visual-DNA contract.</item>
|
|
19
18
|
<item>RFC-0371: Add optional <code>fonts</code> field for biome-driven Fontsource CSS imports.</item>
|
|
19
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
20
|
+
|
|
21
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
22
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
23
|
+
|
|
24
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
20
25
|
</CHANGE_SUMMARY>
|
|
21
26
|
*/
|
|
22
27
|
|
|
@@ -186,7 +191,7 @@ export const biomeConstraintsSchema = z
|
|
|
186
191
|
.strict();
|
|
187
192
|
|
|
188
193
|
// RFC-0114: site-background layer schema mirrored from
|
|
189
|
-
// @warpgogol/werkstatt-shared/
|
|
194
|
+
// @warpgogol/werkstatt-shared/schemas/site-background. Defined locally to avoid a
|
|
190
195
|
// cross-package import dependency (ontology must not depend on share).
|
|
191
196
|
const biomeSiteBackgroundLayerSchema = z.discriminatedUnion("kind", [
|
|
192
197
|
z
|
|
@@ -8,13 +8,15 @@ lossless projection to both OpenAPI (RFC-0289) and MCP tool schemas (RFC-0290).
|
|
|
8
8
|
</purpose>
|
|
9
9
|
<non-goals>
|
|
10
10
|
<item>Do not resolve entitlements or active-capability logic here — that is
|
|
11
|
-
@warpgogol/werkstatt-shared/
|
|
11
|
+
@warpgogol/werkstatt-shared/agent/capability.ts (resolveActiveCapabilities).</item>
|
|
12
12
|
<item>Do not widen the JSON-Schema subset beyond what OpenAPI + MCP both
|
|
13
13
|
accept verbatim — widening requires an RFC amending RFC-0288.</item>
|
|
14
14
|
</non-goals>
|
|
15
15
|
</MODULE_CONTRACT>
|
|
16
16
|
<CHANGE_SUMMARY>
|
|
17
17
|
<item>RFC-0288: initial capability record schema.</item>
|
|
18
|
+
<item>RFC-1112: add sideEffect ("write"|"none"); integration + humanEquivalent become optional and are required unless sideEffect is "none".</item>
|
|
19
|
+
<item>RFC-1115: add optional agentGuidance block (sideEffect, whenToUse, whenNotToUse, retrySemantics) rendered into MCP tool descriptions and OpenAPI operation docs.</item>
|
|
18
20
|
</CHANGE_SUMMARY>
|
|
19
21
|
*/
|
|
20
22
|
|
|
@@ -80,6 +82,22 @@ const capabilityLimitsSchema = z
|
|
|
80
82
|
})
|
|
81
83
|
.strict();
|
|
82
84
|
|
|
85
|
+
/**
|
|
86
|
+
* RFC-1115: model-oriented guidance rendered into MCP tool descriptions and
|
|
87
|
+
* OpenAPI operation docs. `sideEffect` restates the record-level sideEffect so
|
|
88
|
+
* the guidance block is self-contained — a superRefine keeps them consistent.
|
|
89
|
+
* `retrySemantics` describes the RFC-1112 Idempotency-Key contract
|
|
90
|
+
* descriptively; the mechanism stays owned by RFC-1112.
|
|
91
|
+
*/
|
|
92
|
+
const capabilityAgentGuidanceSchema = z
|
|
93
|
+
.object({
|
|
94
|
+
sideEffect: z.enum(["write", "none"]),
|
|
95
|
+
whenToUse: z.string().min(1),
|
|
96
|
+
whenNotToUse: z.string().min(1).optional(),
|
|
97
|
+
retrySemantics: z.string().min(1).optional(),
|
|
98
|
+
})
|
|
99
|
+
.strict();
|
|
100
|
+
|
|
83
101
|
/** RFC-0288: one capability catalog record (packages/werkstatt-site/src/domain/ontology/capabilities/<id>.yaml). */
|
|
84
102
|
export const capabilityRecordSchema = z
|
|
85
103
|
.object({
|
|
@@ -90,15 +108,49 @@ export const capabilityRecordSchema = z
|
|
|
90
108
|
/** Integer; bump on breaking input/output change (by RFC). */
|
|
91
109
|
version: z.number().int().positive(),
|
|
92
110
|
kind: z.literal("action"),
|
|
111
|
+
/**
|
|
112
|
+
* RFC-1112: "write" (default when absent) dispatches an IntegrationEvent;
|
|
113
|
+
* "none" marks a side-effect-free preview that validates input and returns
|
|
114
|
+
* a draftId without dispatching.
|
|
115
|
+
*/
|
|
116
|
+
sideEffect: z.enum(["write", "none"]).optional(),
|
|
93
117
|
title: localizedStringSchema,
|
|
94
118
|
description: localizedStringSchema,
|
|
95
119
|
input: capabilityInputOutputSchema,
|
|
96
120
|
output: capabilityInputOutputSchema,
|
|
97
|
-
integration: capabilityIntegrationSchema,
|
|
121
|
+
integration: capabilityIntegrationSchema.optional(),
|
|
98
122
|
requires: capabilityRequiresSchema,
|
|
99
|
-
humanEquivalent: capabilityHumanEquivalentSchema,
|
|
123
|
+
humanEquivalent: capabilityHumanEquivalentSchema.optional(),
|
|
100
124
|
limits: capabilityLimitsSchema,
|
|
125
|
+
agentGuidance: capabilityAgentGuidanceSchema.optional(),
|
|
101
126
|
})
|
|
102
|
-
.strict()
|
|
127
|
+
.strict()
|
|
128
|
+
.superRefine((record, ctx) => {
|
|
129
|
+
// RFC-1115: agentGuidance.sideEffect must restate the effective record-level
|
|
130
|
+
// sideEffect (absent means "write") — contradictory declarations are drift.
|
|
131
|
+
const effectiveSideEffect = record.sideEffect ?? "write";
|
|
132
|
+
if (record.agentGuidance && record.agentGuidance.sideEffect !== effectiveSideEffect) {
|
|
133
|
+
ctx.addIssue({
|
|
134
|
+
code: "custom",
|
|
135
|
+
path: ["agentGuidance", "sideEffect"],
|
|
136
|
+
message: `must match the record-level sideEffect ("${effectiveSideEffect}")`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (record.sideEffect === "none") return;
|
|
140
|
+
if (!record.integration) {
|
|
141
|
+
ctx.addIssue({
|
|
142
|
+
code: "custom",
|
|
143
|
+
path: ["integration"],
|
|
144
|
+
message: 'required unless sideEffect is "none"',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (!record.humanEquivalent) {
|
|
148
|
+
ctx.addIssue({
|
|
149
|
+
code: "custom",
|
|
150
|
+
path: ["humanEquivalent"],
|
|
151
|
+
message: 'required unless sideEffect is "none"',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
});
|
|
103
155
|
|
|
104
156
|
export type CapabilityRecord = z.infer<typeof capabilityRecordSchema>;
|
|
@@ -12,7 +12,12 @@ section archetypes that forms a proven page structure for a given intent
|
|
|
12
12
|
</non-goals>
|
|
13
13
|
</MODULE_CONTRACT>
|
|
14
14
|
<CHANGE_SUMMARY>
|
|
15
|
-
<item>
|
|
15
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
16
|
+
|
|
17
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
18
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
19
|
+
|
|
20
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
16
21
|
</CHANGE_SUMMARY>
|
|
17
22
|
*/
|
|
18
23
|
|
|
@@ -9,10 +9,14 @@ Re-exports the Constellation, Biome, SiteFamily, and SystemManifest schemas and
|
|
|
9
9
|
</non-goals>
|
|
10
10
|
</MODULE_CONTRACT>
|
|
11
11
|
<CHANGE_SUMMARY>
|
|
12
|
-
<item>Wave 1 (RFC-0025): Initial creation.</item>
|
|
13
12
|
<item>RFC-0071: Re-export site-family contract and expanded biome surface.</item>
|
|
14
13
|
<item>RFC-0371: Re-export biome font entry schema and types.</item>
|
|
15
|
-
<item>
|
|
14
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
15
|
+
|
|
16
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
17
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
18
|
+
|
|
19
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
16
20
|
</CHANGE_SUMMARY>
|
|
17
21
|
*/
|
|
18
22
|
|
|
@@ -11,8 +11,13 @@ filesystem I/O, YAML parsing, and fragment composition behind one interface.
|
|
|
11
11
|
</non-goals>
|
|
12
12
|
</MODULE_CONTRACT>
|
|
13
13
|
<CHANGE_SUMMARY>
|
|
14
|
-
<item>Architecture review 2026-07-10: extracted from page-entry.ts to separate declarative schemas from runtime I/O.</item>
|
|
15
14
|
<item>RFC-0484: suppress console.debug for directories without manifests — group directories are expected to have none.</item>
|
|
15
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
16
|
+
|
|
17
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
18
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
19
|
+
|
|
20
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
16
21
|
</CHANGE_SUMMARY>
|
|
17
22
|
*/
|
|
18
23
|
|
|
@@ -6,14 +6,18 @@ Every page .md file under apps/<app>/src/content/pages/ must conform to PageEntr
|
|
|
6
6
|
Exports BlockEntrySchema and PageEntrySchema — pure declarative schemas, no I/O.
|
|
7
7
|
</purpose>
|
|
8
8
|
<non-goals>
|
|
9
|
-
<item>Do not implement the buildPage pipeline here — that lives in @warpgogol/werkstatt-shared/
|
|
9
|
+
<item>Do not implement the buildPage pipeline here — that lives in @warpgogol/werkstatt-shared/page.</item>
|
|
10
10
|
<item>Do not parse YAML here; callers provide parsed objects to schema.parse().</item>
|
|
11
11
|
<item>Do not validate cross-system.yaml references — that is page.block.validate's job.</item>
|
|
12
12
|
</non-goals>
|
|
13
13
|
</MODULE_CONTRACT>
|
|
14
14
|
<CHANGE_SUMMARY>
|
|
15
|
-
<item>
|
|
16
|
-
|
|
15
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
16
|
+
|
|
17
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
18
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
19
|
+
|
|
20
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
17
21
|
</CHANGE_SUMMARY>
|
|
18
22
|
*/
|
|
19
23
|
|
|
@@ -35,8 +39,8 @@ const PRINT_REGIONS = [
|
|
|
35
39
|
] as const;
|
|
36
40
|
|
|
37
41
|
// ---------------------------------------------------------------------------
|
|
38
|
-
// VisibilityExprSchema (re-declared here to avoid cross-package dep on @warpgogol/werkstatt-shared/
|
|
39
|
-
// page.block.validate uses the canonical one from @warpgogol/werkstatt-shared/
|
|
42
|
+
// VisibilityExprSchema (re-declared here to avoid cross-package dep on @warpgogol/werkstatt-shared/page)
|
|
43
|
+
// page.block.validate uses the canonical one from @warpgogol/werkstatt-shared/page;
|
|
40
44
|
// the schema here is for Astro content-collection integration.
|
|
41
45
|
// ---------------------------------------------------------------------------
|
|
42
46
|
|
|
@@ -8,7 +8,12 @@ Exports growthVendorSchema as the canonical vendor config shape, reused by @warp
|
|
|
8
8
|
</MODULE_CONTRACT>
|
|
9
9
|
<CHANGE_SUMMARY>
|
|
10
10
|
<item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
|
|
11
|
-
<item>
|
|
11
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
12
|
+
|
|
13
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
14
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
15
|
+
|
|
16
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
12
17
|
</CHANGE_SUMMARY>
|
|
13
18
|
*/
|
|
14
19
|
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
<item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
|
|
10
10
|
<item>RFC-0377: added optional `audience` field to the per-page pin schema.</item>
|
|
11
11
|
<item>ADR-0062: added `ctaTarget` to identity, `sectionNav` + `ctaTarget` to page pins, created `systemCollectionSchema` for content collection typing.</item>
|
|
12
|
+
<item>RFC-1106: step 2 — extend systemManifestSchema
|
|
13
|
+
|
|
14
|
+
Add identity.legal (RFC-0096) and seo.anchorText.extraStopPhrases (RFC-0911) to systemManifestSchema — the two interface-only fields with living consumers. No dead fields found: all other interface fields already exist in the schema.</item>
|
|
12
15
|
</CHANGE_SUMMARY>
|
|
13
16
|
*/
|
|
14
17
|
|
|
@@ -16,7 +19,7 @@ import { z } from "zod";
|
|
|
16
19
|
|
|
17
20
|
import { systemSharedContextSchema, systemGrowthSchema } from "./growth.ts";
|
|
18
21
|
import { systemReleaseSchema } from "./release.ts";
|
|
19
|
-
import { systemTextSchema } from "./text.ts";
|
|
22
|
+
import { systemTextSchema, systemTypographySchema } from "./text.ts";
|
|
20
23
|
import { systemIntegrationsSchema } from "./integrations.ts";
|
|
21
24
|
import { systemVerificationSchema } from "./verification.ts";
|
|
22
25
|
import { semanticPageTypeSchema, articleMetadataSchema, pageOutputSchema } from "./page-output.ts";
|
|
@@ -87,6 +90,18 @@ export const systemManifestSchema = z.object({
|
|
|
87
90
|
* Used by resolve-route.ts to populate `ctaTarget` in PageRouteData.
|
|
88
91
|
*/
|
|
89
92
|
ctaTarget: z.string().min(1).optional(),
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* RFC-0096: Operator details consumed by legal.scaffold to fill
|
|
96
|
+
* Impressum / Datenschutz stubs.
|
|
97
|
+
*/
|
|
98
|
+
legal: z
|
|
99
|
+
.object({
|
|
100
|
+
responsibleName: z.string().min(1).optional(),
|
|
101
|
+
address: z.string().min(1).optional(),
|
|
102
|
+
email: z.string().min(1).optional(),
|
|
103
|
+
})
|
|
104
|
+
.optional(),
|
|
90
105
|
}),
|
|
91
106
|
|
|
92
107
|
/**
|
|
@@ -294,6 +309,12 @@ export const systemManifestSchema = z.object({
|
|
|
294
309
|
*/
|
|
295
310
|
text: systemTextSchema.optional(),
|
|
296
311
|
|
|
312
|
+
/**
|
|
313
|
+
* RFC-1070: typography validator configuration. Allowed tokens and
|
|
314
|
+
* per-locale abbreviation overrides. Client-writable.
|
|
315
|
+
*/
|
|
316
|
+
typography: systemTypographySchema.optional(),
|
|
317
|
+
|
|
297
318
|
/**
|
|
298
319
|
* RFC-0169: subscription billing binding. `billing.stripeCustomerId` is the
|
|
299
320
|
* Stripe customer whose active Entitlements gate this site's paid modules.
|
|
@@ -494,6 +515,8 @@ export const systemManifestSchema = z.object({
|
|
|
494
515
|
* `responsibilityBlock.swapOrder` is true, the page handler swaps
|
|
495
516
|
* primaryItems/secondaryItems and labels.primary/labels.secondary at
|
|
496
517
|
* render time. Default false = render as authored in content.
|
|
518
|
+
* RFC-1087: `codeHighlightTheme` selects the Shiki theme for build-time
|
|
519
|
+
* syntax highlighting. Default "github-light" when absent.
|
|
497
520
|
*/
|
|
498
521
|
ui: z
|
|
499
522
|
.object({
|
|
@@ -502,6 +525,7 @@ export const systemManifestSchema = z.object({
|
|
|
502
525
|
swapOrder: z.boolean().optional().default(false),
|
|
503
526
|
})
|
|
504
527
|
.optional(),
|
|
528
|
+
codeHighlightTheme: z.string().min(1).optional(),
|
|
505
529
|
})
|
|
506
530
|
.optional(),
|
|
507
531
|
|
|
@@ -511,6 +535,21 @@ export const systemManifestSchema = z.object({
|
|
|
511
535
|
* When absent, search.verification.validate emits SEARCH-VERIFY-01.
|
|
512
536
|
*/
|
|
513
537
|
verification: systemVerificationSchema.optional(),
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* RFC-0911: SEO validator configuration extension point.
|
|
541
|
+
* Sites extend the built-in de/uk anchor-text stop-list via
|
|
542
|
+
* `seo.anchorText.extraStopPhrases` (lang → phrases).
|
|
543
|
+
*/
|
|
544
|
+
seo: z
|
|
545
|
+
.object({
|
|
546
|
+
anchorText: z
|
|
547
|
+
.object({
|
|
548
|
+
extraStopPhrases: z.record(z.string(), z.array(z.string())).optional(),
|
|
549
|
+
})
|
|
550
|
+
.optional(),
|
|
551
|
+
})
|
|
552
|
+
.optional(),
|
|
514
553
|
});
|
|
515
554
|
|
|
516
555
|
export type SystemManifest = z.infer<typeof systemManifestSchema>;
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
</MODULE_CONTRACT>
|
|
8
8
|
<CHANGE_SUMMARY>
|
|
9
9
|
<item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
|
|
10
|
+
<item>RFC-1106: step 4 — single-source SemanticPageType
|
|
11
|
+
|
|
12
|
+
semanticPageTypeSchema (ontology/schemas/system/page-output.ts) is now the sole declaration of the closed DNA-19 vocabulary. semantic/models.ts derives the type via z.infer and SEMANTIC_PAGE_TYPES via schema.options — the hand-synced union/array and stale circular-dependency comments are deleted.</item>
|
|
10
13
|
</CHANGE_SUMMARY>
|
|
11
14
|
*/
|
|
12
15
|
|
|
@@ -15,13 +18,11 @@ import { z } from "zod";
|
|
|
15
18
|
/**
|
|
16
19
|
* RFC-0042/RFC-0050: the semantic role of a page. Drives semantic model
|
|
17
20
|
* construction and the default llms inclusion depth. Mirrors
|
|
18
|
-
* SemanticPageType in @warpgogol/werkstatt-shared/
|
|
21
|
+
* SemanticPageType in @warpgogol/werkstatt-shared/semantic.
|
|
19
22
|
*/
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// compile-time contract. They are kept in sync manually to avoid a circular
|
|
24
|
-
// dependency between `ontology` and `share`.
|
|
23
|
+
// RFC-1106: this schema is the sole declaration of the SemanticPageType closed
|
|
24
|
+
// vocabulary (DNA-19). `semantic/models.ts` derives the type and the runtime
|
|
25
|
+
// array from it — do not declare a parallel union elsewhere.
|
|
25
26
|
export const semanticPageTypeSchema = z.enum([
|
|
26
27
|
"home",
|
|
27
28
|
"about",
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
</MODULE_CONTRACT>
|
|
8
8
|
<CHANGE_SUMMARY>
|
|
9
9
|
<item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
|
|
10
|
+
<item>RFC-1070: added systemTypographySchema for typography validator configuration.</item>
|
|
10
11
|
</CHANGE_SUMMARY>
|
|
11
12
|
*/
|
|
12
13
|
|
|
@@ -49,6 +50,20 @@ export const systemTextNormalizeSchema = z
|
|
|
49
50
|
})
|
|
50
51
|
.strict();
|
|
51
52
|
|
|
53
|
+
/**
|
|
54
|
+
* The `typography` block in system.yaml (RFC-1070). Controls typography validator
|
|
55
|
+
* configuration: allowed tokens and per-locale abbreviation overrides.
|
|
56
|
+
* CLIENT-WRITABLE.
|
|
57
|
+
*/
|
|
58
|
+
export const systemTypographySchema = z
|
|
59
|
+
.object({
|
|
60
|
+
/** Additional allowed tokens exempt from TYPO-CASE-01 and TYPO-APOS rules. */
|
|
61
|
+
allowedTokens: z.array(z.string()).optional(),
|
|
62
|
+
/** Per-locale abbreviation overrides. Merged into built-in locale defaults. */
|
|
63
|
+
abbreviations: z.record(z.string(), z.array(z.string())).optional(),
|
|
64
|
+
})
|
|
65
|
+
.strict();
|
|
66
|
+
|
|
52
67
|
export const systemTextSchema = z
|
|
53
68
|
.object({
|
|
54
69
|
normalize: systemTextNormalizeSchema.optional(),
|
|
@@ -13,10 +13,14 @@ Stored at apps/<app-slug>/system.yaml.
|
|
|
13
13
|
</non-goals>
|
|
14
14
|
</MODULE_CONTRACT>
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
|
-
<item>Wave 1 (RFC-0025): Initial creation.</item>
|
|
17
|
-
<item>Wave 1 (RFC-0027): Added growth block — vendor adapter binding, active funnels, active experiments.</item>
|
|
18
16
|
<item>RFC-0328: Added "legal" to semanticPageTypeSchema.</item>
|
|
19
17
|
<item>RFC-0303 Phase 3: split the flat 822-line file into sub-modules under system/; this file is now the re-export shim.</item>
|
|
18
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
19
|
+
|
|
20
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
21
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
22
|
+
|
|
23
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
20
24
|
</CHANGE_SUMMARY>
|
|
21
25
|
*/
|
|
22
26
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { test, expect, describe } from "vitest";
|
|
2
|
-
import { systemConfigSchema } from "@warpgogol/werkstatt-
|
|
2
|
+
import { systemConfigSchema } from "@warpgogol/werkstatt-shared/ontology/operations";
|
|
3
3
|
|
|
4
4
|
const validBaseEntry = {
|
|
5
5
|
schemaVersion: "system-config/v1",
|
|
@@ -11,17 +11,21 @@ pipeline for each block defined in a page's content.
|
|
|
11
11
|
</non-goals>
|
|
12
12
|
</MODULE_CONTRACT>
|
|
13
13
|
<CHANGE_SUMMARY>
|
|
14
|
-
<item>Wave 1 (RFC-0026): Initial creation — ResolvedPage/ResolvedBlock types and buildPage pipeline.</item>
|
|
15
|
-
<item>Moved SectionProps into shared package for cross-app consumption.</item>
|
|
16
|
-
<item>RFC-0091: PLANET_IMPORT_PATHS and BLOCK_TYPE_TO_COSMIC_NAME now derived from registry; import from @warpgogol/werkstatt-shared/ontology/archetypes instead of literal constants.</item>
|
|
17
14
|
<item>RFC-0262: add the optional BuildPageOptions.validateProps dev-time fail-fast hook, called once per resolved shell and content block.</item>
|
|
18
15
|
<item>RFC-0263: hideSectionNumber injection now keyed off registry-derived roleByCosmicName[planetName] === "hero" instead of the hardcoded UNNUMBERED_HERO_PLANETS literal set (deleted).</item>
|
|
19
|
-
<item>RFC-0264: relocated SectionProps/SectionPageOverride here from the @warpgogol/werkstatt-shared
|
|
16
|
+
<item>RFC-0264: relocated SectionProps/SectionPageOverride here from the @warpgogol/werkstatt-shared root barrel (its natural domain owner); consumers now import from @warpgogol/werkstatt-shared/page.</item>
|
|
17
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
18
|
+
|
|
19
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
20
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
21
|
+
|
|
22
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
23
|
+
<history>RFC-0091</history>
|
|
20
24
|
</CHANGE_SUMMARY>
|
|
21
25
|
*/
|
|
22
26
|
|
|
23
|
-
import type { RuntimeContext } from "
|
|
24
|
-
import { evalVisibility, type ResolvedFeatureGraph, EMPTY_FEATURE_GRAPH } from "
|
|
27
|
+
import type { RuntimeContext } from "../runtime/runtime-context.ts";
|
|
28
|
+
import { evalVisibility, type ResolvedFeatureGraph, EMPTY_FEATURE_GRAPH } from "../policy/visibility.ts";
|
|
25
29
|
import {
|
|
26
30
|
planetImportPaths as registryPlanetImportPaths,
|
|
27
31
|
blockTypeToCosmicName as registryBlockTypeToCosmicName,
|
|
@@ -48,7 +52,7 @@ export interface BlockEntry {
|
|
|
48
52
|
type?: string; // CMS-facing archetype slug — validated by page.block.validate
|
|
49
53
|
use?: string; // PlanetName or MoonName — normalized from type for internal resolution
|
|
50
54
|
props: Record<string, unknown>;
|
|
51
|
-
visibility?: import("
|
|
55
|
+
visibility?: import("../policy/visibility.ts").VisibilityExpr;
|
|
52
56
|
/** Block layer — shell blocks render before content blocks (RFC-0036). */
|
|
53
57
|
layer?: "shell" | "section";
|
|
54
58
|
}
|
|
@@ -89,7 +93,7 @@ export interface ResolvedBlock {
|
|
|
89
93
|
/** Props already evaluated and ready to spread into the component. */
|
|
90
94
|
readonly props: Record<string, unknown>;
|
|
91
95
|
/** The raw visibility expression (retained for attribution / debugging). null if absent. */
|
|
92
|
-
readonly visibility: import("
|
|
96
|
+
readonly visibility: import("../policy/visibility.ts").VisibilityExpr | null;
|
|
93
97
|
/** Block layer — shell blocks are prepended and render before content blocks (RFC-0036). */
|
|
94
98
|
readonly layer?: "shell" | "section";
|
|
95
99
|
}
|
|
@@ -111,7 +115,7 @@ export interface ResolvedPage {
|
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
// RFC-0035: Universal Section Props Contract — every resolved content block's
|
|
114
|
-
// props extend this shape. RFC-0264: relocated from the @warpgogol/werkstatt-shared
|
|
118
|
+
// props extend this shape. RFC-0264: relocated from the @warpgogol/werkstatt-shared root
|
|
115
119
|
// barrel to page.ts (its natural domain owner); re-exported from the `./page`
|
|
116
120
|
// subpath.
|
|
117
121
|
export interface SectionProps {
|