@warpgogol/werkstatt-shared 0.14.0 → 0.15.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 +31 -13
- package/README.uk.md +25 -15
- package/package.json +519 -762
- package/src/{share/agent → agent}/ard-catalog.ts +6 -1
- package/src/{share/agent → agent}/dns-aid.test.ts +2 -2
- package/src/{share/agent → agent}/manifest.ts +15 -1
- package/src/{share/agent → agent}/search.ts +6 -1
- package/src/{share → agent}/tests/api-catalog.test.ts +2 -2
- package/src/{share → agent}/tests/ard-catalog.test.ts +2 -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 +1 -1
- package/src/{share → agent}/tests/mcp-card.test.ts +2 -2
- package/src/agent/tests/omit-empty.test.ts +33 -0
- package/src/{share → agent}/tests/openapi.test.ts +2 -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 +22 -5
- package/src/checks/tests/remediation-auto-populate.test.ts +83 -0
- 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/external-link-qr.test.ts +8 -0
- package/src/client-scripts/tests/external-links.test.ts +25 -0
- package/src/client-scripts/tests/gsap-counter.test.ts +8 -0
- package/src/client-scripts/tests/gsap-mountain-journey.test.ts +8 -0
- package/src/client-scripts/tests/gsap-parallax.test.ts +8 -0
- package/src/client-scripts/tests/gsap-reveal.test.ts +8 -0
- package/src/client-scripts/tests/gsap-stagger.test.ts +8 -0
- package/src/client-scripts/tests/inline-number-animation.test.ts +8 -0
- package/src/client-scripts/tests/lenis.test.ts +8 -0
- package/src/client-scripts/tests/live-photos.test.ts +8 -0
- package/src/client-scripts/tests/lordicon.test.ts +8 -0
- package/src/client-scripts/tests/orchestrator.test.ts +47 -0
- package/src/client-scripts/tests/scheduler.test.ts +23 -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 +11 -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 +12 -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/index.ts +101 -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/vitest.config.ts +8 -0
- package/src/kernel/desired-state.ts +227 -0
- package/src/kernel/diagnostic.ts +289 -0
- package/src/kernel/fs-atomic.ts +131 -0
- package/src/kernel/index.ts +15 -0
- package/src/kernel/tests/fs-atomic.test.ts +150 -0
- package/src/kernel/tests/workspace-io.test.ts +187 -0
- package/src/kernel/types.ts +459 -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 +8 -8
- 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/node/tests/derived-prices-loader.test.ts +59 -0
- package/src/node/tests/markdown-twin-provenance.test.ts +152 -0
- package/src/observability/env-resolver.ts +6 -1
- package/src/observability/index.ts +6 -1
- package/src/observability/otlp-converter.ts +6 -1
- package/src/observability/otlp-transport.ts +6 -1
- 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/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 +26 -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 +187 -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 +64 -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 +1 -1
- 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/tests/growth.test.ts +22 -0
- package/src/ontology/schemas/system/tests/integrations.test.ts +12 -0
- package/src/ontology/schemas/system/tests/manifest.test.ts +22 -0
- package/src/ontology/schemas/system/tests/page-output.test.ts +13 -0
- package/src/ontology/schemas/system/tests/release.test.ts +22 -0
- package/src/ontology/schemas/system/tests/text.test.ts +18 -0
- package/src/ontology/schemas/system/tests/verification.test.ts +12 -0
- package/src/ontology/schemas/system/text.ts +15 -0
- package/src/ontology/schemas/system.ts +6 -2
- package/src/ontology/schemas/tests/biome.test.ts +19 -0
- package/src/ontology/schemas/tests/capability.test.ts +22 -0
- package/src/ontology/schemas/tests/constellation.test.ts +22 -0
- package/src/ontology/schemas/tests/dns-records.test.ts +13 -0
- package/src/ontology/schemas/tests/manifest-resolver.test.ts +13 -0
- package/src/ontology/schemas/tests/page-entry.test.ts +22 -0
- package/src/ontology/schemas/tests/section-archetype.test.ts +12 -0
- package/src/ontology/schemas/tests/site-family.test.ts +18 -0
- package/src/ontology/schemas/tests/system.test.ts +20 -0
- 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/index.ts +6 -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 +1 -1
- 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/schemas/tests/claim-records.test.ts +52 -0
- package/src/schemas/tests/claims.test.ts +23 -0
- package/src/schemas/tests/effects.test.ts +116 -0
- package/src/schemas/tests/features.test.ts +61 -0
- package/src/schemas/tests/horizontal-align.test.ts +16 -0
- package/src/schemas/tests/icon-color.test.ts +16 -0
- package/src/schemas/tests/live-photo.test.ts +40 -0
- package/src/schemas/tests/material-credit.test.ts +51 -0
- package/src/schemas/tests/media.test.ts +26 -0
- package/src/schemas/tests/navigation.test.ts +58 -0
- package/src/schemas/tests/page-base.test.ts +19 -0
- package/src/schemas/tests/participant.test.ts +26 -0
- package/src/schemas/tests/person.test.ts +12 -0
- package/src/schemas/tests/print.test.ts +30 -0
- package/src/schemas/tests/section-background.test.ts +31 -0
- package/src/schemas/tests/section-body.test.ts +16 -0
- package/src/schemas/tests/section-cards.test.ts +17 -0
- package/src/schemas/tests/section-cta.test.ts +41 -0
- package/src/schemas/tests/section-header.test.ts +31 -0
- package/src/schemas/tests/section-image.test.ts +24 -0
- package/src/schemas/tests/section-motion.test.ts +29 -0
- package/src/schemas/tests/section-shell.test.ts +42 -0
- package/src/schemas/tests/section-stats.test.ts +17 -0
- package/src/schemas/tests/site-background.test.ts +33 -0
- package/src/schemas/tests/standard-list-item.test.ts +16 -0
- 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 +54 -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/tests/article.test.ts +89 -0
- package/src/semantic/jsonld/tests/breadcrumb.test.ts +62 -0
- package/src/semantic/jsonld/tests/collection-list.test.ts +39 -0
- package/src/semantic/jsonld/tests/faq.test.ts +60 -0
- package/src/semantic/jsonld/tests/initiative.test.ts +56 -0
- package/src/semantic/jsonld/tests/organization.test.ts +123 -0
- package/src/semantic/jsonld/tests/person.test.ts +89 -0
- package/src/semantic/jsonld/tests/service.test.ts +65 -0
- package/src/semantic/jsonld/tests/shared.test.ts +41 -0
- package/src/semantic/jsonld/tests/video.test.ts +84 -0
- package/src/semantic/jsonld/tests/webpage.test.ts +93 -0
- package/src/semantic/jsonld/tests/website.test.ts +27 -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 +41 -3
- package/src/{share/semantic → semantic}/models.ts +27 -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/semantic/tests/ai.test.ts +55 -0
- package/src/semantic/tests/block-extraction.test.ts +34 -0
- package/src/{share/tests/breadcrumbs.test.ts → semantic/tests/breadcrumbs-0229.test.ts} +1 -1
- package/src/semantic/tests/breadcrumbs.test.ts +127 -0
- package/src/{share → semantic}/tests/build-page-price-markers.test.ts +2 -2
- package/src/semantic/tests/build-page.test.ts +122 -0
- package/src/semantic/tests/business-projection.test.ts +367 -0
- package/src/semantic/tests/canonical-uri.test.ts +56 -0
- package/src/semantic/tests/extract.test.ts +209 -0
- package/src/semantic/tests/feed.test.ts +113 -0
- package/src/semantic/tests/freshness.pbt.test.ts +108 -0
- package/src/semantic/tests/helpers.ts +32 -0
- package/src/semantic/tests/ids.test.ts +118 -0
- package/src/{share/tests/image-sitemap.test.ts → semantic/tests/image-sitemap-0150.test.ts} +1 -1
- package/src/semantic/tests/image-sitemap.test.ts +109 -0
- 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/semantic/tests/jsonld.test.ts +61 -0
- package/src/{share → semantic}/tests/llms-0789.test.ts +2 -2
- package/src/semantic/tests/llms-policy.test.ts +60 -0
- package/src/semantic/tests/llms.test.ts +164 -0
- package/src/semantic/tests/markdown-hygiene.test.ts +72 -0
- package/src/semantic/tests/markdown-page.test.ts +97 -0
- package/src/{share → semantic}/tests/organization-jsonld.test.ts +3 -3
- package/src/semantic/tests/organization-profile.test.ts +107 -0
- package/src/{share/tests/output-projection.test.ts → semantic/tests/output-projection-0143.test.ts} +1 -1
- package/src/semantic/tests/output-projection.test.ts +77 -0
- package/src/semantic/tests/page-markdown.test.ts +98 -0
- package/src/semantic/tests/page-utils.test.ts +88 -0
- package/src/{share/tests/price-marker-resolver.test.ts → semantic/tests/price-marker-resolver-0767.test.ts} +2 -2
- package/src/semantic/tests/price-marker-resolver.test.ts +90 -0
- package/src/semantic/tests/project-claims.pbt.test.ts +60 -0
- package/src/semantic/tests/robots.test.ts +70 -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/semantic/tests/update-stamp.test.ts +102 -0
- package/src/signing/index.ts +13 -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 +108 -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/content/index.ts +0 -16
- package/src/share/content-discipline/index.ts +0 -14
- package/src/share/index.ts +0 -86
- package/src/share/legal/index.ts +0 -1
- package/src/share/redirects.ts +0 -54
- package/src/share/scripts/index.ts +0 -26
- package/src/share/semantic/jsonld/shared.ts +0 -31
- package/src/share/semantic/jsonld/types.ts +0 -18
- 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 -36
- 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}/api-catalog.ts +0 -0
- /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}/index.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}/openapi.ts +0 -0
- /package/src/{share/agent → agent}/proof.ts +0 -0
- /package/src/{share/agent → agent}/search.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}/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}/language-redirect.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/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/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}/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
|
@@ -12,7 +12,12 @@ passes it here.
|
|
|
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
|
|
|
@@ -11,8 +11,8 @@ Verifies determinism, domain extraction, and content URL construction.
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { describe, it, expect } from "vitest";
|
|
14
|
-
import { buildDnsAidRecord } from "@warpgogol/werkstatt-shared/
|
|
15
|
-
import type { AgentSurfaceManifest } from "@warpgogol/werkstatt-shared/
|
|
14
|
+
import { buildDnsAidRecord } from "@warpgogol/werkstatt-shared/agent";
|
|
15
|
+
import type { AgentSurfaceManifest } from "@warpgogol/werkstatt-shared/agent";
|
|
16
16
|
|
|
17
17
|
function makeManifest(baseUrl: string): AgentSurfaceManifest {
|
|
18
18
|
return {
|
|
@@ -15,6 +15,7 @@ two runs on unchanged input are byte-identical (AS-7).
|
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0286: initial manifest contract and pure builder.</item>
|
|
17
17
|
<item>RFC-0954: add search interface to AgentSurfaceManifest.interfaces.</item>
|
|
18
|
+
<item>RFC-1076: add claims field to AgentSurfaceManifest, AgentClaimRef type, bump AGENT_SURFACE_VERSION to 1.1.0.</item>
|
|
18
19
|
</CHANGE_SUMMARY>
|
|
19
20
|
*/
|
|
20
21
|
|
|
@@ -22,7 +23,7 @@ import { createHash } from "node:crypto";
|
|
|
22
23
|
import type { AgentSurfaceProof } from "./proof.ts";
|
|
23
24
|
|
|
24
25
|
/** Semver of THIS manifest schema. Bump only via an RFC amending RFC-0286 (AS-7). */
|
|
25
|
-
export const AGENT_SURFACE_VERSION = "1.
|
|
26
|
+
export const AGENT_SURFACE_VERSION = "1.1.0";
|
|
26
27
|
|
|
27
28
|
export interface AgentKnowledgeRef {
|
|
28
29
|
/** A BusinessDomain with visibility "public" (RFC-0287). */
|
|
@@ -41,6 +42,14 @@ export interface AgentActionRef {
|
|
|
41
42
|
entitlement: "agent.actions";
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
export interface AgentClaimRef {
|
|
46
|
+
id: string;
|
|
47
|
+
claimClass: string;
|
|
48
|
+
statement: string;
|
|
49
|
+
verificationLevel?: string;
|
|
50
|
+
evidenceCount: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
export interface AgentSurfaceManifest {
|
|
45
54
|
surfaceVersion: string;
|
|
46
55
|
site: string;
|
|
@@ -50,6 +59,8 @@ export interface AgentSurfaceManifest {
|
|
|
50
59
|
contentHash: string;
|
|
51
60
|
knowledge: AgentKnowledgeRef[];
|
|
52
61
|
actions: AgentActionRef[];
|
|
62
|
+
/** RFC-1076: claim provenance chain — claims with their evidence references. */
|
|
63
|
+
claims: AgentClaimRef[];
|
|
53
64
|
interfaces: {
|
|
54
65
|
llms: string;
|
|
55
66
|
twins: { pattern: string } | null;
|
|
@@ -67,6 +78,8 @@ export interface AgentSurfaceManifestInput {
|
|
|
67
78
|
languages: { default: string; supported: string[] };
|
|
68
79
|
knowledge?: AgentKnowledgeRef[];
|
|
69
80
|
actions?: AgentActionRef[];
|
|
81
|
+
/** RFC-1076: claim provenance summaries for the manifest. */
|
|
82
|
+
claims?: AgentClaimRef[];
|
|
70
83
|
hasTwins?: boolean;
|
|
71
84
|
openapiUrl?: string | null;
|
|
72
85
|
mcp?: { url: string; protocolVersion: string } | null;
|
|
@@ -135,6 +148,7 @@ export function buildAgentSurfaceManifest(input: AgentSurfaceManifestInput): Age
|
|
|
135
148
|
},
|
|
136
149
|
knowledge: [...(input.knowledge ?? [])].sort((a, b) => a.domain.localeCompare(b.domain)),
|
|
137
150
|
actions: [...(input.actions ?? [])].sort((a, b) => a.id.localeCompare(b.id)),
|
|
151
|
+
claims: [...(input.claims ?? [])].sort((a, b) => a.id.localeCompare(b.id)),
|
|
138
152
|
interfaces: {
|
|
139
153
|
llms: "/llms.txt",
|
|
140
154
|
twins: input.hasTwins ? { pattern: "/**.md" } : null,
|
|
@@ -14,7 +14,12 @@ no timestamps in the hash payload.
|
|
|
14
14
|
</MODULE_CONTRACT>
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0954: initial search manifest contract, query/response types, and pure builder.</item>
|
|
17
|
-
<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>
|
|
18
23
|
</CHANGE_SUMMARY>
|
|
19
24
|
*/
|
|
20
25
|
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { test, expect } from "vitest";
|
|
15
|
-
import { buildApiCatalog } from "../
|
|
16
|
-
import { buildAgentSurfaceManifest } from "../
|
|
15
|
+
import { buildApiCatalog } from "../api-catalog.ts";
|
|
16
|
+
import { buildAgentSurfaceManifest } from "../manifest.ts";
|
|
17
17
|
|
|
18
18
|
test("buildApiCatalog: empty manifest yields service-meta + service-doc links", () => {
|
|
19
19
|
const manifest = buildAgentSurfaceManifest({
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { test, expect } from "vitest";
|
|
12
|
-
import { buildArdCatalog } from "../
|
|
13
|
-
import { buildAgentSurfaceManifest } from "../
|
|
12
|
+
import { buildArdCatalog } from "../ard-catalog.ts";
|
|
13
|
+
import { buildAgentSurfaceManifest } from "../manifest.ts";
|
|
14
14
|
|
|
15
15
|
test("buildArdCatalog: produces specVersion, host, and entries array", () => {
|
|
16
16
|
const manifest = buildAgentSurfaceManifest({
|
|
@@ -16,8 +16,8 @@ import {
|
|
|
16
16
|
AGENT_KNOWLEDGE_DOMAINS,
|
|
17
17
|
isAgentKnowledgeDomain,
|
|
18
18
|
formatAgentKnowledge,
|
|
19
|
-
} from "../
|
|
20
|
-
import { BUSINESS_DOMAIN_VISIBILITY } from "
|
|
19
|
+
} from "../knowledge.ts";
|
|
20
|
+
import { BUSINESS_DOMAIN_VISIBILITY } from "../../semantic/business-projection.ts";
|
|
21
21
|
|
|
22
22
|
test("AGENT_KNOWLEDGE_DOMAINS: matches exactly the `public` BUSINESS_DOMAIN_VISIBILITY keys", () => {
|
|
23
23
|
const publicDomains = Object.entries(BUSINESS_DOMAIN_VISIBILITY)
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { test, expect } from "vitest";
|
|
15
|
-
import { buildMcpServerCard } from "../
|
|
16
|
-
import { buildAgentSurfaceManifest } from "../
|
|
15
|
+
import { buildMcpServerCard } from "../mcp-card.ts";
|
|
16
|
+
import { buildAgentSurfaceManifest } from "../manifest.ts";
|
|
17
17
|
|
|
18
18
|
test("buildMcpServerCard: null mcp → returns null", () => {
|
|
19
19
|
const manifest = buildAgentSurfaceManifest({
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { omitEmptyKnowledgeValues } from "../omit-empty.ts";
|
|
3
|
+
|
|
4
|
+
describe("omitEmptyKnowledgeValues", () => {
|
|
5
|
+
it("is a function", () => {
|
|
6
|
+
expect(typeof omitEmptyKnowledgeValues).toBe("function");
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it("removes empty strings, null, undefined, empty arrays, and empty objects", () => {
|
|
10
|
+
const input = { a: "value", b: "", c: null, d: undefined, e: [], f: {} };
|
|
11
|
+
const result = omitEmptyKnowledgeValues(input);
|
|
12
|
+
expect(result).not.toHaveProperty("b");
|
|
13
|
+
expect(result).not.toHaveProperty("c");
|
|
14
|
+
expect(result).not.toHaveProperty("d");
|
|
15
|
+
expect(result).not.toHaveProperty("e");
|
|
16
|
+
expect(result).not.toHaveProperty("f");
|
|
17
|
+
expect(result).toHaveProperty("a", "value");
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("preserves false and 0 (schema-allowed falsy values)", () => {
|
|
21
|
+
const input = { enabled: false, count: 0 };
|
|
22
|
+
const result = omitEmptyKnowledgeValues(input);
|
|
23
|
+
expect(result).toHaveProperty("enabled", false);
|
|
24
|
+
expect(result).toHaveProperty("count", 0);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("preserves non-empty arrays and objects", () => {
|
|
28
|
+
const input = { items: [1, 2], nested: { x: 1 } };
|
|
29
|
+
const result = omitEmptyKnowledgeValues(input);
|
|
30
|
+
expect(result).toHaveProperty("items", [1, 2]);
|
|
31
|
+
expect(result).toHaveProperty("nested", { x: 1 });
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import { test, expect } from "vitest";
|
|
16
|
-
import { formatAgentOpenApi } from "../
|
|
17
|
-
import { buildAgentSurfaceManifest } from "../
|
|
16
|
+
import { formatAgentOpenApi } from "../openapi.ts";
|
|
17
|
+
import { buildAgentSurfaceManifest } from "../manifest.ts";
|
|
18
18
|
|
|
19
19
|
test("formatAgentOpenApi: empty manifest yields a valid document with no paths", () => {
|
|
20
20
|
const manifest = buildAgentSurfaceManifest({
|
|
@@ -25,19 +25,19 @@ import {
|
|
|
25
25
|
materialCreditSchema,
|
|
26
26
|
materialTargetKey,
|
|
27
27
|
formatMaterialCreditLine,
|
|
28
|
-
} from "
|
|
28
|
+
} from "../schemas/material-credit.ts";
|
|
29
29
|
|
|
30
|
-
// RFC-0488: re-export label mapping helpers for @warpgogol/werkstatt-shared/
|
|
30
|
+
// RFC-0488: re-export label mapping helpers for @warpgogol/werkstatt-shared/attribution/material-credits consumers.
|
|
31
31
|
export {
|
|
32
32
|
labelForSourceType,
|
|
33
33
|
labelForStatus,
|
|
34
34
|
labelForUsageBasis,
|
|
35
|
-
} from "
|
|
35
|
+
} from "../schemas/material-credit.ts";
|
|
36
36
|
export type {
|
|
37
37
|
MaterialSourceType,
|
|
38
38
|
MaterialCreditStatus,
|
|
39
39
|
UsageBasisType,
|
|
40
|
-
} from "
|
|
40
|
+
} from "../schemas/material-credit.ts";
|
|
41
41
|
|
|
42
42
|
export interface MaterialCreditRecord {
|
|
43
43
|
file: string;
|
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
</non-goals>
|
|
7
7
|
</MODULE_CONTRACT>
|
|
8
8
|
<CHANGE_SUMMARY>
|
|
9
|
-
<item>
|
|
9
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
10
|
+
|
|
11
|
+
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>
|
|
12
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
13
|
+
|
|
14
|
+
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>
|
|
10
15
|
</CHANGE_SUMMARY>
|
|
11
16
|
*/
|
|
12
17
|
|
package/src/checks/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
<MODULE_CONTRACT>
|
|
3
|
-
<purpose>Shared
|
|
3
|
+
<purpose>Shared checks index barrel for @warpgogol/werkstatt-shared — exports diagnosticsResult, suppressions, i18n, and astro-site-url helpers (RFC-0868).</purpose>
|
|
4
4
|
<non-goals>
|
|
5
5
|
<item>Do not export site-specific validators or pipeline definitions.</item>
|
|
6
6
|
<item>Do not import from @warpgogol/werkstatt-site or any stack plugin.</item>
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
</MODULE_CONTRACT>
|
|
9
9
|
<CHANGE_SUMMARY>
|
|
10
10
|
<item>RFC-0868: extracted from werkstatt-site/src/checks as shared infrastructure.</item>
|
|
11
|
+
<item>RFC-1097: sweep — tail packages clean
|
|
12
|
+
|
|
13
|
+
Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</item>
|
|
11
14
|
</CHANGE_SUMMARY>
|
|
12
15
|
*/
|
|
13
16
|
|
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
</non-goals>
|
|
7
7
|
</MODULE_CONTRACT>
|
|
8
8
|
<CHANGE_SUMMARY>
|
|
9
|
-
<item>
|
|
9
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
10
|
+
|
|
11
|
+
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>
|
|
12
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
13
|
+
|
|
14
|
+
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>
|
|
10
15
|
</CHANGE_SUMMARY>
|
|
11
16
|
*/
|
|
12
17
|
|
package/src/checks/lib/i18n.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>i18n helpers for check validators — read the default language code from a site system.md frontmatter.</purpose>
|
|
4
|
+
<non-goals>
|
|
5
|
+
<item>Do not load translation catalogs — this module only resolves the default language code.</item>
|
|
6
|
+
</non-goals>
|
|
7
|
+
</MODULE_CONTRACT>
|
|
8
|
+
<CHANGE_SUMMARY>
|
|
9
|
+
<item>RFC-1097: sweep — tail packages clean
|
|
10
|
+
|
|
11
|
+
Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</item>
|
|
12
|
+
</CHANGE_SUMMARY>
|
|
13
|
+
*/
|
|
14
|
+
|
|
1
15
|
import { join } from "node:path";
|
|
2
16
|
import { readFile } from "node:fs/promises";
|
|
3
17
|
import { parse as parseYaml } from "yaml";
|
|
@@ -13,6 +13,7 @@ ruleId = command; diagnosticsResult takes rich Diagnostic[] with registered ids.
|
|
|
13
13
|
</MODULE_CONTRACT>
|
|
14
14
|
<CHANGE_SUMMARY>
|
|
15
15
|
<item>RFC-0029 review: Initial creation to fix systemic exit-code bug across check files.</item>
|
|
16
|
+
<item>RFC-1027: Auto-populate Diagnostic.remediation from REMEDIATION_CATALOG in diagnosticsResult().</item>
|
|
16
17
|
</CHANGE_SUMMARY>
|
|
17
18
|
*/
|
|
18
19
|
|
|
@@ -21,7 +22,8 @@ import type {
|
|
|
21
22
|
Diagnostic,
|
|
22
23
|
KernelCommandResult,
|
|
23
24
|
KernelNextStep,
|
|
24
|
-
} from "@warpgogol/werkstatt-
|
|
25
|
+
} from "@warpgogol/werkstatt-shared/kernel";
|
|
26
|
+
import { lookupRemediation } from "../remediation/remediation-catalog.ts";
|
|
25
27
|
|
|
26
28
|
function defaultFailNextSteps(command: string): KernelNextStep[] {
|
|
27
29
|
return [
|
|
@@ -66,10 +68,25 @@ export function diagnosticsResult(
|
|
|
66
68
|
diagnostics: Diagnostic[],
|
|
67
69
|
nextSteps?: KernelNextStep[],
|
|
68
70
|
): KernelCommandResult<CheckResult> {
|
|
71
|
+
const enrichedDiagnostics = diagnostics.map((d) => {
|
|
72
|
+
if (d.remediation) return d;
|
|
73
|
+
const pattern = lookupRemediation(d.ruleId);
|
|
74
|
+
if (!pattern) return d;
|
|
75
|
+
return {
|
|
76
|
+
...d,
|
|
77
|
+
remediation: {
|
|
78
|
+
ruleId: pattern.ruleId,
|
|
79
|
+
action: pattern.action,
|
|
80
|
+
...(pattern.template !== undefined && { template: pattern.template }),
|
|
81
|
+
...(pattern.docRef !== undefined && { docRef: pattern.docRef }),
|
|
82
|
+
...(pattern.targetFiles !== undefined && { targetFiles: pattern.targetFiles }),
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
});
|
|
69
86
|
const summary = {
|
|
70
|
-
error:
|
|
71
|
-
warning:
|
|
72
|
-
info:
|
|
87
|
+
error: enrichedDiagnostics.filter((d) => d.severity === "error").length,
|
|
88
|
+
warning: enrichedDiagnostics.filter((d) => d.severity === "warning").length,
|
|
89
|
+
info: enrichedDiagnostics.filter((d) => d.severity === "info").length,
|
|
73
90
|
};
|
|
74
91
|
const status: CheckResult["status"] =
|
|
75
92
|
summary.error > 0 ? "fail" : summary.warning > 0 ? "warn" : "pass";
|
|
@@ -77,7 +94,7 @@ export function diagnosticsResult(
|
|
|
77
94
|
nextSteps ?? (summary.error > 0 ? defaultFailNextSteps(command) : undefined);
|
|
78
95
|
const counts = formatCounts(summary.error, summary.warning);
|
|
79
96
|
return {
|
|
80
|
-
data: { command, status, diagnostics, summary },
|
|
97
|
+
data: { command, status, diagnostics: enrichedDiagnostics, summary },
|
|
81
98
|
exitCode: summary.error > 0 ? 1 : 0,
|
|
82
99
|
summary: counts ? `[${command}] ${counts}` : `[${command}]`,
|
|
83
100
|
nextSteps: resolvedNextSteps,
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>RFC-1027: unit tests for diagnosticsResult() remediation auto-population.</purpose>
|
|
4
|
+
</MODULE_CONTRACT>
|
|
5
|
+
<CHANGE_SUMMARY>
|
|
6
|
+
<item>RFC-1027: initial tests for remediation auto-population from REMEDIATION_CATALOG.</item>
|
|
7
|
+
</CHANGE_SUMMARY>
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { test, expect } from "vitest";
|
|
11
|
+
import { diagnosticsResult } from "../result-helpers.ts";
|
|
12
|
+
import type { Diagnostic } from "@warpgogol/werkstatt-shared/kernel";
|
|
13
|
+
|
|
14
|
+
test("diagnosticsResult: auto-populates remediation from catalog for known ruleId", () => {
|
|
15
|
+
const diagnostics: Diagnostic[] = [
|
|
16
|
+
{
|
|
17
|
+
ruleId: "GEN-FILES-01",
|
|
18
|
+
severity: "error",
|
|
19
|
+
message: "Generated file is stale",
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
const result = diagnosticsResult("test.command", diagnostics);
|
|
23
|
+
expect(result.data!.diagnostics[0].remediation).toBeDefined();
|
|
24
|
+
expect(result.data!.diagnostics[0].remediation?.ruleId).toBe("GEN-FILES-01");
|
|
25
|
+
expect(result.data!.diagnostics[0].remediation?.action).toContain("Regenerate");
|
|
26
|
+
expect(result.data!.diagnostics[0].remediation?.docRef).toBe(
|
|
27
|
+
"docs/authoring/generated-files-and-templates.md",
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("diagnosticsResult: does not overwrite existing remediation field", () => {
|
|
32
|
+
const diagnostics: Diagnostic[] = [
|
|
33
|
+
{
|
|
34
|
+
ruleId: "GEN-FILES-01",
|
|
35
|
+
severity: "error",
|
|
36
|
+
message: "Stale file",
|
|
37
|
+
remediation: {
|
|
38
|
+
ruleId: "GEN-FILES-01",
|
|
39
|
+
action: "Custom action — do not overwrite",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
const result = diagnosticsResult("test.command", diagnostics);
|
|
44
|
+
expect(result.data!.diagnostics[0].remediation?.action).toBe("Custom action — do not overwrite");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("diagnosticsResult: no remediation for unknown ruleId", () => {
|
|
48
|
+
const diagnostics: Diagnostic[] = [
|
|
49
|
+
{
|
|
50
|
+
ruleId: "UNKNOWN-RULE-999",
|
|
51
|
+
severity: "warning",
|
|
52
|
+
message: "Some warning",
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
const result = diagnosticsResult("test.command", diagnostics);
|
|
56
|
+
expect(result.data!.diagnostics[0].remediation).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("diagnosticsResult: preserves fixHint alongside remediation", () => {
|
|
60
|
+
const diagnostics: Diagnostic[] = [
|
|
61
|
+
{
|
|
62
|
+
ruleId: "GEN-FILES-01",
|
|
63
|
+
severity: "error",
|
|
64
|
+
message: "Stale",
|
|
65
|
+
fixHint: "Run the generator",
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
const result = diagnosticsResult("test.command", diagnostics);
|
|
69
|
+
expect(result.data!.diagnostics[0].fixHint).toBe("Run the generator");
|
|
70
|
+
expect(result.data!.diagnostics[0].remediation).toBeDefined();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("diagnosticsResult: multiple diagnostics get independent remediation", () => {
|
|
74
|
+
const diagnostics: Diagnostic[] = [
|
|
75
|
+
{ ruleId: "GEN-FILES-01", severity: "error", message: "err 1" },
|
|
76
|
+
{ ruleId: "PARITY-SECTION-COUNT", severity: "error", message: "err 2" },
|
|
77
|
+
{ ruleId: "UNKNOWN", severity: "info", message: "info 1" },
|
|
78
|
+
];
|
|
79
|
+
const result = diagnosticsResult("test.command", diagnostics);
|
|
80
|
+
expect(result.data!.diagnostics[0].remediation?.ruleId).toBe("GEN-FILES-01");
|
|
81
|
+
expect(result.data!.diagnostics[1].remediation?.ruleId).toBe("PARITY-SECTION-COUNT");
|
|
82
|
+
expect(result.data!.diagnostics[2].remediation).toBeUndefined();
|
|
83
|
+
});
|
|
@@ -7,8 +7,12 @@
|
|
|
7
7
|
</non-goals>
|
|
8
8
|
</MODULE_CONTRACT>
|
|
9
9
|
<CHANGE_SUMMARY>
|
|
10
|
-
<item>
|
|
11
|
-
|
|
10
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
11
|
+
|
|
12
|
+
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>
|
|
13
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
14
|
+
|
|
15
|
+
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
16
|
</CHANGE_SUMMARY>
|
|
13
17
|
*/
|
|
14
18
|
|
|
@@ -114,29 +114,27 @@ export function initExternalLinkQr(options?: ExternalLinkQrOptions): void {
|
|
|
114
114
|
return !modal.hidden;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
function
|
|
118
|
-
const
|
|
119
|
-
const anchor = trigger.closest("a");
|
|
117
|
+
function handleDelegatedClick(e: Event): void {
|
|
118
|
+
const anchor = (e.target as HTMLElement)?.closest?.("a[data-external-link]");
|
|
120
119
|
if (!anchor) return;
|
|
121
120
|
|
|
122
121
|
const href = anchor.getAttribute("href");
|
|
123
122
|
if (!href) return;
|
|
124
123
|
|
|
125
124
|
e.preventDefault();
|
|
126
|
-
|
|
127
|
-
openModal(href, trigger);
|
|
125
|
+
openModal(href, anchor as HTMLElement);
|
|
128
126
|
}
|
|
129
127
|
|
|
130
|
-
function
|
|
128
|
+
function handleDelegatedKeydown(e: KeyboardEvent): void {
|
|
131
129
|
if (e.key !== "Enter" && e.key !== " ") return;
|
|
132
|
-
e.
|
|
133
|
-
e.stopPropagation();
|
|
134
|
-
const trigger = e.currentTarget as HTMLElement;
|
|
135
|
-
const anchor = trigger.closest("a");
|
|
130
|
+
const anchor = (e.target as HTMLElement)?.closest?.("a[data-external-link]");
|
|
136
131
|
if (!anchor) return;
|
|
132
|
+
|
|
137
133
|
const href = anchor.getAttribute("href");
|
|
138
134
|
if (!href) return;
|
|
139
|
-
|
|
135
|
+
|
|
136
|
+
e.preventDefault();
|
|
137
|
+
openModal(href, anchor as HTMLElement);
|
|
140
138
|
}
|
|
141
139
|
|
|
142
140
|
function handleKeydown(e: KeyboardEvent): void {
|
|
@@ -173,11 +171,8 @@ export function initExternalLinkQr(options?: ExternalLinkQrOptions): void {
|
|
|
173
171
|
}
|
|
174
172
|
|
|
175
173
|
function attachTriggers(): void {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
trigger.addEventListener("click", handleTriggerClick);
|
|
179
|
-
trigger.addEventListener("keydown", handleTriggerKeydown);
|
|
180
|
-
}
|
|
174
|
+
document.addEventListener("click", handleDelegatedClick);
|
|
175
|
+
document.addEventListener("keydown", handleDelegatedKeydown);
|
|
181
176
|
}
|
|
182
177
|
|
|
183
178
|
overlay.addEventListener("click", closeModal);
|
|
@@ -10,8 +10,13 @@ external-link-qr entitlement is active, also injects a QR trigger span into each
|
|
|
10
10
|
</MODULE_CONTRACT>
|
|
11
11
|
<CHANGE_SUMMARY>
|
|
12
12
|
<item>RFC-0011 Phase 2: Extracted from layout.astro inline script into src/scripts canonical pattern.</item>
|
|
13
|
-
<item>Migrated to @warpgogol/werkstatt-shared/share/scripts for platform-wide reuse.</item>
|
|
14
13
|
<item>RFC-0932: accept ExternalLinkBehaviorOptions, inject QR trigger span when entitled.</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>
|
|
15
20
|
</CHANGE_SUMMARY>
|
|
16
21
|
*/
|
|
17
22
|
|
|
@@ -52,6 +57,12 @@ export function applyExternalLinkBehavior(options?: ExternalLinkBehaviorOptions)
|
|
|
52
57
|
anchor.setAttribute("rel", "noopener noreferrer");
|
|
53
58
|
|
|
54
59
|
if (qrEntitled && anchor.getAttribute("data-external-link-qr") !== "off") {
|
|
60
|
+
// Skip QR trigger for anchors wrapping media elements — a text arrow
|
|
61
|
+
// appended after an image/SVG/canvas looks visually wrong.
|
|
62
|
+
const hasMediaChild = anchor.querySelector("img, svg, canvas, picture");
|
|
63
|
+
if (hasMediaChild) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
55
66
|
if (!anchor.querySelector("[data-qr-trigger]")) {
|
|
56
67
|
const trigger = document.createElement("span");
|
|
57
68
|
trigger.className = "external-link-qr-trigger";
|
|
@@ -8,15 +8,20 @@
|
|
|
8
8
|
</non-goals>
|
|
9
9
|
</MODULE_CONTRACT>
|
|
10
10
|
<CHANGE_SUMMARY>
|
|
11
|
-
<item>RFC-0040: Created as shared GSAP counter initialization module in @warpgogol/werkstatt-shared/
|
|
12
|
-
<item>Extended selector to support .hero__stat in addition to .impact-section__stat.</item>
|
|
11
|
+
<item>RFC-0040: Created as shared GSAP counter initialization module in @warpgogol/werkstatt-shared/client-scripts.</item>
|
|
13
12
|
<item>RFC-0758: Extended selector to support .dynamic-status-block__stat.</item>
|
|
13
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
14
|
+
|
|
15
|
+
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>
|
|
16
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
17
|
+
|
|
18
|
+
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>
|
|
14
19
|
</CHANGE_SUMMARY>
|
|
15
20
|
*/
|
|
16
21
|
|
|
17
22
|
// @ai-invariant: RFC-0040. Do not import gsap at the top level. Always dynamic-import inside initGsapCounter.
|
|
18
23
|
|
|
19
|
-
import { parseNumeric } from "
|
|
24
|
+
import { parseNumeric } from "./counter-utils.ts";
|
|
20
25
|
|
|
21
26
|
export interface GsapCounterOptions {
|
|
22
27
|
prefersReducedMotion?: boolean;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>scripts index — central export point for the script modules used in dynamic loading contexts.</purpose>
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
<non-goals>
|
|
7
|
+
<item>Do not define new modules or components.</item>
|
|
8
|
+
<item>Do not manage application state or business logic.</item>
|
|
9
|
+
</non-goals>
|
|
10
|
+
</MODULE_CONTRACT>
|
|
11
|
+
|
|
12
|
+
<CHANGE_SUMMARY>
|
|
13
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
14
|
+
|
|
15
|
+
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>
|
|
16
|
+
<item>RFC-1097: sweep — tail packages clean
|
|
17
|
+
|
|
18
|
+
Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</item>
|
|
19
|
+
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
20
|
+
|
|
21
|
+
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>
|
|
22
|
+
</CHANGE_SUMMARY>
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
// scheduler.ts is loaded dynamically by orchestrator.ts and lordicon.ts
|
|
26
|
+
export * from "./lordicon.ts";
|
|
27
|
+
export * from "./external-links.ts";
|
|
28
|
+
export * from "./external-link-qr.ts";
|
|
29
|
+
export * from "./lenis.ts";
|
|
30
|
+
export * from "./scroll-spy.ts";
|
|
31
|
+
export * from "./orchestrator.ts";
|
|
32
|
+
// gsap-counter.ts (RFC-0040) is loaded dynamically by orchestrator.ts
|
|
33
|
+
// inline-number-animation.ts (RFC-0041) is loaded dynamically by orchestrator.ts
|
|
34
|
+
// gsap-reveal.ts / gsap-parallax.ts / gsap-stagger.ts (RFC-0106) are loaded
|
|
35
|
+
// dynamically by orchestrator.ts via the reveal / parallax / stagger opt-ins.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
</non-goals>
|
|
9
9
|
</MODULE_CONTRACT>
|
|
10
10
|
<CHANGE_SUMMARY>
|
|
11
|
-
<item>RFC-0041: Created as shared GSAP inline number animation module in @warpgogol/werkstatt-shared/
|
|
11
|
+
<item>RFC-0041: Created as shared GSAP inline number animation module in @warpgogol/werkstatt-shared/client-scripts.</item>
|
|
12
12
|
</CHANGE_SUMMARY>
|
|
13
13
|
*/
|
|
14
14
|
|