@nextcommerce/campaigns-os 1.33.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/AGENTS.md +204 -0
- package/CHANGELOG.md +5002 -0
- package/CONTEXT.md +685 -0
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +368 -0
- package/agents/claude/CLAUDE.md +32 -0
- package/agents/codex/AGENTS.md +27 -0
- package/agents/copilot/copilot-instructions.md +14 -0
- package/agents/cursor/campaigns-os.mdc +13 -0
- package/bin/campaigns-os.mjs +38 -0
- package/campaign-spec/README.md +138 -0
- package/campaign-spec/dist/analytics-vocabulary.d.ts +47 -0
- package/campaign-spec/dist/analytics-vocabulary.js +74 -0
- package/campaign-spec/dist/index.d.ts +40 -0
- package/campaign-spec/dist/index.js +77 -0
- package/campaign-spec/dist/normalize.d.ts +22 -0
- package/campaign-spec/dist/normalize.js +41 -0
- package/campaign-spec/dist/routing.d.ts +190 -0
- package/campaign-spec/dist/routing.js +263 -0
- package/campaign-spec/dist/rules/analytics-contract-shape.d.ts +42 -0
- package/campaign-spec/dist/rules/analytics-contract-shape.js +303 -0
- package/campaign-spec/dist/rules/assembly-hints-shape.d.ts +42 -0
- package/campaign-spec/dist/rules/assembly-hints-shape.js +191 -0
- package/campaign-spec/dist/rules/campaign-metadata.d.ts +14 -0
- package/campaign-spec/dist/rules/campaign-metadata.js +40 -0
- package/campaign-spec/dist/rules/checkout-has-success-url.d.ts +31 -0
- package/campaign-spec/dist/rules/checkout-has-success-url.js +66 -0
- package/campaign-spec/dist/rules/cycle-detection.d.ts +12 -0
- package/campaign-spec/dist/rules/cycle-detection.js +141 -0
- package/campaign-spec/dist/rules/design-source-shape.d.ts +29 -0
- package/campaign-spec/dist/rules/design-source-shape.js +142 -0
- package/campaign-spec/dist/rules/downsell-without-upsell.d.ts +11 -0
- package/campaign-spec/dist/rules/downsell-without-upsell.js +40 -0
- package/campaign-spec/dist/rules/exit-intent-validation.d.ts +23 -0
- package/campaign-spec/dist/rules/exit-intent-validation.js +147 -0
- package/campaign-spec/dist/rules/funnel-count.d.ts +9 -0
- package/campaign-spec/dist/rules/funnel-count.js +37 -0
- package/campaign-spec/dist/rules/funnel-hypothesis-length.d.ts +22 -0
- package/campaign-spec/dist/rules/funnel-hypothesis-length.js +60 -0
- package/campaign-spec/dist/rules/funnel-identity.d.ts +15 -0
- package/campaign-spec/dist/rules/funnel-identity.js +57 -0
- package/campaign-spec/dist/rules/funnel-weight-sum.d.ts +20 -0
- package/campaign-spec/dist/rules/funnel-weight-sum.js +66 -0
- package/campaign-spec/dist/rules/index.d.ts +69 -0
- package/campaign-spec/dist/rules/index.js +131 -0
- package/campaign-spec/dist/rules/offer-ref-integrity.d.ts +13 -0
- package/campaign-spec/dist/rules/offer-ref-integrity.js +59 -0
- package/campaign-spec/dist/rules/package-pricing-sanity.d.ts +12 -0
- package/campaign-spec/dist/rules/package-pricing-sanity.js +42 -0
- package/campaign-spec/dist/rules/page-count.d.ts +11 -0
- package/campaign-spec/dist/rules/page-count.js +31 -0
- package/campaign-spec/dist/rules/page-id-uniqueness.d.ts +14 -0
- package/campaign-spec/dist/rules/page-id-uniqueness.js +47 -0
- package/campaign-spec/dist/rules/promo-code-input-validation.d.ts +8 -0
- package/campaign-spec/dist/rules/promo-code-input-validation.js +126 -0
- package/campaign-spec/dist/rules/promo-codes-shape.d.ts +30 -0
- package/campaign-spec/dist/rules/promo-codes-shape.js +187 -0
- package/campaign-spec/dist/rules/route-field-ignored-for-page-type.d.ts +33 -0
- package/campaign-spec/dist/rules/route-field-ignored-for-page-type.js +81 -0
- package/campaign-spec/dist/rules/route-target-resolves.d.ts +32 -0
- package/campaign-spec/dist/rules/route-target-resolves.js +112 -0
- package/campaign-spec/dist/rules/schema-version.d.ts +21 -0
- package/campaign-spec/dist/rules/schema-version.js +53 -0
- package/campaign-spec/dist/rules/sdk-version.d.ts +26 -0
- package/campaign-spec/dist/rules/sdk-version.js +96 -0
- package/campaign-spec/dist/rules/shipping-countries-shape.d.ts +10 -0
- package/campaign-spec/dist/rules/shipping-countries-shape.js +30 -0
- package/campaign-spec/dist/rules/shipping-methods-present.d.ts +10 -0
- package/campaign-spec/dist/rules/shipping-methods-present.js +26 -0
- package/campaign-spec/dist/rules/store-profile-shape.d.ts +30 -0
- package/campaign-spec/dist/rules/store-profile-shape.js +127 -0
- package/campaign-spec/dist/rules/thank-you-requirement.d.ts +16 -0
- package/campaign-spec/dist/rules/thank-you-requirement.js +50 -0
- package/campaign-spec/dist/rules/unknown-top-level-fields.d.ts +28 -0
- package/campaign-spec/dist/rules/unknown-top-level-fields.js +114 -0
- package/campaign-spec/dist/rules/upsell-has-packages.d.ts +9 -0
- package/campaign-spec/dist/rules/upsell-has-packages.js +35 -0
- package/campaign-spec/dist/rules/upsell-routing-complete.d.ts +10 -0
- package/campaign-spec/dist/rules/upsell-routing-complete.js +45 -0
- package/campaign-spec/dist/rules/upsell-without-checkout.d.ts +11 -0
- package/campaign-spec/dist/rules/upsell-without-checkout.js +44 -0
- package/campaign-spec/dist/rules/variant-labels-shape.d.ts +28 -0
- package/campaign-spec/dist/rules/variant-labels-shape.js +86 -0
- package/campaign-spec/dist/sdk-version-parse.d.ts +43 -0
- package/campaign-spec/dist/sdk-version-parse.js +62 -0
- package/campaign-spec/dist/types.d.ts +674 -0
- package/campaign-spec/dist/types.js +40 -0
- package/campaign-spec/package.json +12 -0
- package/compatibility.json +25 -0
- package/contracts/agent-relevant-change-policy.v1.json +111 -0
- package/contracts/brand-theme-source-defaults.figma-sections-export.v0.json +32 -0
- package/contracts/brand-theme-target-tokens.next-core.v0.json +65 -0
- package/contracts/campaign-cart-checkout-field-contract.v0.json +45 -0
- package/contracts/campaign-cart-sdk-support-policy.v0.json +11 -0
- package/contracts/commerce-surface-catalog.json +2452 -0
- package/contracts/fixtures/orientation/canonicalization/v1.json +34 -0
- package/contracts/fixtures/orientation/envelope/current.json +95 -0
- package/contracts/fixtures/orientation/envelope/freshness_unknown.json +97 -0
- package/contracts/fixtures/orientation/envelope/legacy_baseline.json +95 -0
- package/contracts/fixtures/orientation/envelope/orientation_available.json +136 -0
- package/contracts/fixtures/orientation/envelope/recovered_interrupted_update.json +136 -0
- package/contracts/fixtures/orientation/envelope/refused.json +100 -0
- package/contracts/fixtures/orientation/envelope/restart_required.json +137 -0
- package/contracts/fixtures/orientation/envelope/updated.json +135 -0
- package/contracts/fixtures/orientation/hostile-target/README.md +61 -0
- package/contracts/fixtures/orientation/hostile-target/manifest.json +82 -0
- package/contracts/fixtures/orientation/hostile-target/repo/CHANGELOG.md +18 -0
- package/contracts/fixtures/orientation/hostile-target/repo/bin/intended.mjs +12 -0
- package/contracts/fixtures/orientation/hostile-target/repo/bin/tripwire.mjs +15 -0
- package/contracts/fixtures/orientation/hostile-target/repo/contracts/release-ledger.json +48 -0
- package/contracts/fixtures/orientation/hostile-target/repo/contracts/supported-surface.json +17 -0
- package/contracts/fixtures/orientation/hostile-target/repo/docs/example-contract.md +13 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/post-checkout +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/post-merge +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/pre-commit +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hostile-dependency-tripwire/package.json +15 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hostile-dependency-tripwire/tripwire.mjs +9 -0
- package/contracts/fixtures/orientation/hostile-target/repo/package.json +20 -0
- package/contracts/fixtures/orientation/hostile-target/repo/schemas/example.v0.schema.json +15 -0
- package/contracts/fixtures/orientation/release-gate/cases.json +1073 -0
- package/contracts/fixtures/runtime-recipe/accept/current.json +299 -0
- package/contracts/fixtures/runtime-recipe/accept/minimal.json +294 -0
- package/contracts/fixtures/runtime-recipe/dist-states.json +51 -0
- package/contracts/fixtures/runtime-recipe/manifest.json +85 -0
- package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +297 -0
- package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/missing-required-field.json +251 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +310 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +299 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/assembly-report.json +180 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/build-context.json +115 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/doctor-output.json +29 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/qa-verdict.json +27 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/campaign-runtime.build.json +141 -0
- package/contracts/migration-sidecar-bundle.v0.json +149 -0
- package/contracts/orientation-limits.v1.json +41 -0
- package/contracts/orientation-reason-codes.v1.json +196 -0
- package/contracts/private-template-sources.json +8 -0
- package/contracts/release-ledger.json +4598 -0
- package/contracts/reserved-skill-names.json +13 -0
- package/contracts/runtime-recipe.campaigns-os-node-v1.json +299 -0
- package/contracts/supported-surface.json +180 -0
- package/contracts/template-brand-contract.apollo-mv-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.apollo.v0.json +27 -0
- package/contracts/template-brand-contract.demeter.v0.json +27 -0
- package/contracts/template-brand-contract.olympus-mv-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.olympus-mv-two-step.v0.json +28 -0
- package/contracts/template-brand-contract.olympus.v0.json +27 -0
- package/contracts/template-brand-contract.shared-commerce.v0.json +190 -0
- package/contracts/template-brand-contract.shop-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.shop-three-step.v0.json +29 -0
- package/contracts/template-slot-manifest.apollo-mv-single-step.v0.json +14 -0
- package/contracts/template-slot-manifest.apollo.v0.json +12 -0
- package/contracts/template-slot-manifest.demeter.v0.json +30 -0
- package/contracts/template-slot-manifest.olympus-mv-single-step.v0.json +14 -0
- package/contracts/template-slot-manifest.olympus-mv-two-step.v0.json +15 -0
- package/contracts/template-slot-manifest.olympus.v0.json +12 -0
- package/contracts/template-slot-manifest.shared-content-core.v0.json +4254 -0
- package/contracts/template-slot-manifest.shop-single-step.v0.json +47 -0
- package/contracts/template-slot-manifest.shop-three-step.v0.json +33 -0
- package/docs/brand-theme-bridge.md +159 -0
- package/docs/build-packet.md +1300 -0
- package/docs/campaign-build-brief.md +145 -0
- package/docs/campaign-standardization-report.md +329 -0
- package/docs/campaigns-os-build-flow.md +117 -0
- package/docs/design-source-package.md +784 -0
- package/docs/legacy-migration.md +58 -0
- package/docs/migration-sidecar-bundle.md +139 -0
- package/docs/orientation-contract-reference.md +1220 -0
- package/docs/polish-evidence.md +502 -0
- package/docs/qa-and-test-orders.md +1691 -0
- package/docs/release-ledger-authoring-guide.md +274 -0
- package/docs/runtime-readiness.md +211 -0
- package/docs/supported-surface.md +83 -0
- package/docs/versioning.md +55 -0
- package/docs/workflow-findings-sidecar.md +588 -0
- package/package.json +135 -0
- package/prompts/first-build.md +27 -0
- package/prompts/friction-log.md +30 -0
- package/schemas/campaign-build-brief.v1.schema.json +149 -0
- package/schemas/campaign-design-source-package.v0.schema.json +697 -0
- package/schemas/campaign-runtime-assembly-report.v0.schema.json +390 -0
- package/schemas/campaign-runtime-build-context.v0.schema.json +339 -0
- package/schemas/campaign-runtime-build-packet.v0.schema.json +452 -0
- package/schemas/campaign-spec.v4.schema.json +582 -0
- package/schemas/campaigns-os-doctor-output.v0.schema.json +43 -0
- package/schemas/campaigns-os-legacy-migration-inventory.v0.schema.json +112 -0
- package/schemas/campaigns-os-legacy-provisioning-plan.v0.schema.json +38 -0
- package/schemas/campaigns-os-legacy-provisioning-receipt.v0.schema.json +57 -0
- package/schemas/campaigns-os-qa-verdict-sidecar.v0.schema.json +150 -0
- package/schemas/campaigns-os-qa-verdict.v0.schema.json +438 -0
- package/schemas/campaigns-os-release-ledger.v1.schema.json +162 -0
- package/schemas/campaigns-os-run-record.v0.schema.json +343 -0
- package/schemas/campaigns-os-runtime-recipe.v1.schema.json +313 -0
- package/schemas/campaigns-os-sidecar-bundle-conformance.v0.schema.json +78 -0
- package/schemas/campaigns-os-tooling-orientation.v1.schema.json +381 -0
- package/schemas/campaigns-os-workflow-finding.v0.schema.json +134 -0
- package/schemas/source-html-manifest.v0.schema.json +252 -0
- package/skills/next-campaigns-build/SKILL.md +73 -0
- package/skills/next-campaigns-os/SKILL.md +101 -0
- package/skills/next-campaigns-os/references/session-intake.md +160 -0
- package/skills/next-campaigns-os-setup/SKILL.md +22 -0
- package/skills/next-campaigns-polish/SKILL.md +145 -0
- package/skills/next-campaigns-qa/SKILL.md +92 -0
- package/skills.json +56 -0
- package/skills.sh +64 -0
- package/src/adapter-decision-contract.mjs +333 -0
- package/src/brand-theme.mjs +1151 -0
- package/src/browser-launch.mjs +79 -0
- package/src/build-brief.mjs +781 -0
- package/src/built-site-scope.mjs +312 -0
- package/src/campaign-ecosystem.mjs +734 -0
- package/src/campaign-identity.mjs +405 -0
- package/src/campaign-workspace.mjs +127 -0
- package/src/checkpoint-waiver.mjs +302 -0
- package/src/cli.mjs +13442 -0
- package/src/commercial-journey.mjs +1119 -0
- package/src/commercial-parity.mjs +965 -0
- package/src/consent.mjs +347 -0
- package/src/content-residue.mjs +322 -0
- package/src/deadline.mjs +81 -0
- package/src/design-source-package.mjs +2604 -0
- package/src/deviation.mjs +107 -0
- package/src/doctor-check-registry.mjs +49 -0
- package/src/doctor-sidecar.mjs +106 -0
- package/src/finding-cause.mjs +557 -0
- package/src/findings.mjs +326 -0
- package/src/fs-identity.mjs +68 -0
- package/src/gate-actions.mjs +105 -0
- package/src/html-scan.mjs +53 -0
- package/src/install-mode.mjs +272 -0
- package/src/legacy-migration.d.ts +128 -0
- package/src/legacy-migration.mjs +510 -0
- package/src/lifecycle.mjs +338 -0
- package/src/local-proof.mjs +401 -0
- package/src/map-pin-writeback.mjs +210 -0
- package/src/orchestration-stage-contract.mjs +81 -0
- package/src/package-install-fixture.mjs +33 -0
- package/src/page-kit-build-summary.mjs +175 -0
- package/src/page-kit-campaign-config.mjs +57 -0
- package/src/page-kit-sdk-version.mjs +392 -0
- package/src/page-kit-store-profile.mjs +369 -0
- package/src/page-kit-sync.mjs +162 -0
- package/src/polish-browser.mjs +867 -0
- package/src/polish-capture.mjs +1094 -0
- package/src/polish-deadline.mjs +51 -0
- package/src/polish-gate.mjs +739 -0
- package/src/polish-node.mjs +639 -0
- package/src/polish-page-load.mjs +1100 -0
- package/src/private-template-source.mjs +237 -0
- package/src/proof-policy.mjs +82 -0
- package/src/qa-analytics-correctness.mjs +307 -0
- package/src/qa-analytics-errors.mjs +38 -0
- package/src/qa-analytics-parity.mjs +699 -0
- package/src/qa-binding-evidence.mjs +140 -0
- package/src/qa-browser.mjs +6608 -0
- package/src/qa-cart-entry.mjs +406 -0
- package/src/qa-commercial-parity.mjs +641 -0
- package/src/qa-node.mjs +3620 -0
- package/src/qa-order-bump.mjs +381 -0
- package/src/qa-parity-capture.mjs +428 -0
- package/src/qa-parity-fixture.mjs +359 -0
- package/src/qa-publish.mjs +362 -0
- package/src/qa-purchase-data-layer.mjs +263 -0
- package/src/qa-route-probe.mjs +272 -0
- package/src/qa-sidecar.mjs +188 -0
- package/src/qa-test-order-topology.mjs +207 -0
- package/src/qa-url-privacy.mjs +13 -0
- package/src/qa-verdict-discovery.mjs +192 -0
- package/src/qa-verdict-publish.mjs +105 -0
- package/src/qa-verdict.mjs +287 -0
- package/src/remit.mjs +388 -0
- package/src/repo-scan.mjs +83 -0
- package/src/route-identity.mjs +133 -0
- package/src/run-record-closeout.mjs +229 -0
- package/src/run-record.mjs +839 -0
- package/src/run-session.mjs +226 -0
- package/src/runtime-state-ignore.mjs +113 -0
- package/src/sdk-attribute-index.mjs +212 -0
- package/src/sdk-markup.mjs +358 -0
- package/src/sdk-meta-tags.mjs +52 -0
- package/src/shell-token.mjs +7 -0
- package/src/sidecar-bundle.mjs +399 -0
- package/src/source-asset-crawl.mjs +469 -0
- package/src/source-html-intake.mjs +627 -0
- package/src/source-html-manifest.mjs +276 -0
- package/src/source-prep.mjs +284 -0
- package/src/spec-derive-store.mjs +431 -0
- package/src/spec-derive.mjs +514 -0
- package/src/spec-fetch.mjs +66 -0
- package/src/spec-hash.mjs +48 -0
- package/src/spec-identity.mjs +27 -0
- package/src/stage-ledger.mjs +509 -0
- package/src/standardization-report.mjs +1297 -0
- package/src/template-brand-contract.mjs +473 -0
- package/src/template-freshness.mjs +196 -0
- package/src/template-reference.mjs +81 -0
- package/src/template-slot-manifest.mjs +150 -0
- package/src/text-safety.mjs +62 -0
- package/src/theme-gate.mjs +185 -0
- package/src/upsell-selector-scope.mjs +299 -0
package/CONTEXT.md
ADDED
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
# Campaigns OS Context
|
|
2
|
+
|
|
3
|
+
Campaigns OS coordinates campaign build, proof, and learning work around a
|
|
4
|
+
CampaignSpec-driven workflow. This glossary keeps the public workflow language
|
|
5
|
+
separate from internal orchestration, QA defects, and implementation artifacts.
|
|
6
|
+
|
|
7
|
+
## Language
|
|
8
|
+
|
|
9
|
+
**Certified Template Family**:
|
|
10
|
+
A template family present in the commerce surface catalog AND carrying a
|
|
11
|
+
template brand contract — the set the OS can automate end-to-end with
|
|
12
|
+
deterministic assembly, residue QA, and pricing contracts. `start`/
|
|
13
|
+
`prepare-build` accept only certified families by default; building on
|
|
14
|
+
anything else requires `--allow-uncertified-template "<reason>"`, recorded on
|
|
15
|
+
the Build Packet as `assembly.template_certification.waiver`. NEXT provides
|
|
16
|
+
the rails: the certified set grows by shipping new contracted families, not
|
|
17
|
+
by loosening the gate.
|
|
18
|
+
_Avoid_: supported template, known family, template allowlist
|
|
19
|
+
|
|
20
|
+
**Theme Gate**:
|
|
21
|
+
The deterministic decision point that blocks `next polish|deploy|qa` and
|
|
22
|
+
`qa run` when theme inspect proved a brand theme is generatable, the campaign
|
|
23
|
+
ships commerce pages, and the brand layer is neither applied (after
|
|
24
|
+
`next-core.css`) nor explicitly waived. Evaluated once in the doctor
|
|
25
|
+
(`derived.theme_gate`) and consumed identically by `next` and QA. A waiver
|
|
26
|
+
(`theme waive` / `--theme-waive`) is the only sanctioned bypass and is recorded
|
|
27
|
+
on the Assembly Report with a reason.
|
|
28
|
+
_Avoid_: advisory warning, recommendation, soft check
|
|
29
|
+
|
|
30
|
+
**Template Brand Contract**:
|
|
31
|
+
A per-family contract file (`contracts/template-brand-contract.<family>.v0.json`)
|
|
32
|
+
declaring required `--brand--*` token overrides, starter defaults that count as
|
|
33
|
+
shipped residue (palette hexes, starter logo, unsupported payment chrome), the
|
|
34
|
+
CSS load-order rule for the brand layer, the selectors browser QA inspects for
|
|
35
|
+
applied brand tokens, and pricing-surface modes. QA reads it to fail "still
|
|
36
|
+
visually the starter template" deterministically.
|
|
37
|
+
_Avoid_: style guide, design tokens doc, theme report
|
|
38
|
+
|
|
39
|
+
**Template Reference**:
|
|
40
|
+
The canonical baseline for a template family: its safe runtime structure,
|
|
41
|
+
expected screenshots or render references, default assets, starter residue
|
|
42
|
+
signatures, and family-specific comparison anchors. Template Reference is
|
|
43
|
+
declared by the Template Brand Contract and may be supported by captured
|
|
44
|
+
reference artifacts; the normal authority is template-versioned, while campaign
|
|
45
|
+
runs may capture or refresh references for provenance when needed. Template
|
|
46
|
+
Reference informs Build and Polish about the selected template family without
|
|
47
|
+
becoming campaign creative intent.
|
|
48
|
+
_Avoid_: design source, starter inspiration, visual target
|
|
49
|
+
|
|
50
|
+
**Pricing Mode**:
|
|
51
|
+
The declarative way a pricing surface (checkout bundle, bump, upsell) renders
|
|
52
|
+
its price rows: `full_price`, `discounted`, `compare_at`, `unit_total`, or
|
|
53
|
+
`unit_only`. Partials render the right rows for the mode; campaign CSS must
|
|
54
|
+
never hide price rows with `display:none`. A full-price upsell shows exactly
|
|
55
|
+
one visible price row; zero visible price rows is a QA blocker.
|
|
56
|
+
_Avoid_: CSS cleanup, price hiding, discount styling
|
|
57
|
+
|
|
58
|
+
**Deviation Telemetry**:
|
|
59
|
+
The sidecar journal (`.campaign-runtime/agent-deviations.jsonl`) that records
|
|
60
|
+
when a pipeline-advancing command does not match the last `campaigns-os next`
|
|
61
|
+
recommendation on an active run session: recommended stage/commands, actual
|
|
62
|
+
command, and an optional `--deviation-reason`. It measures "the agent ignored
|
|
63
|
+
the orchestrator"; hard enforcement lives in the gates, not here.
|
|
64
|
+
_Avoid_: audit log, compliance gate, blocker
|
|
65
|
+
|
|
66
|
+
**Run Telemetry**:
|
|
67
|
+
The Campaigns OS surface that captures what happened on each run and, with
|
|
68
|
+
consent, remits it to NEXT so the toolchain improves over time. Capture is
|
|
69
|
+
always local; consent gates remit only. Run Telemetry is the umbrella that
|
|
70
|
+
Workflow Findings now sit inside as one channel — it is not a separate product
|
|
71
|
+
from the findings work, it is its grown-up form.
|
|
72
|
+
_Avoid_: analytics SDK, crash reporter, separate feedback product
|
|
73
|
+
|
|
74
|
+
**Run Record**:
|
|
75
|
+
The per-run manifest Run Telemetry produces, keyed by one canonical `run_id` and
|
|
76
|
+
written to `.campaign-runtime/run-records/<run_id>.json`. It carries a stable
|
|
77
|
+
envelope, run identity, source-artifact references (`{path, schema_version,
|
|
78
|
+
sha256, material_fingerprint}` where available), normalized observation arrays
|
|
79
|
+
(doctor codes, spec-rule fires, adapter decisions, QA disposition), and a
|
|
80
|
+
snapshot of this run's Workflow Findings. It may snapshot the Campaign Readiness
|
|
81
|
+
Readback for audit, but it references the proof trail; it does not re-embed or
|
|
82
|
+
replace it.
|
|
83
|
+
_Avoid_: unified mega-artifact, log dump, proof artifact
|
|
84
|
+
|
|
85
|
+
**Workflow Finding**:
|
|
86
|
+
A human- or agent-observed gap, friction, or positive signal about the Campaigns
|
|
87
|
+
OS workflow itself. A Workflow Finding may cite a Build Packet, Assembly Report,
|
|
88
|
+
doctor output, or QA Verdict as evidence, but it does not replace those artifacts.
|
|
89
|
+
_Avoid_: QA defect, bug report, friction log
|
|
90
|
+
|
|
91
|
+
**Findings Sidecar**:
|
|
92
|
+
The local Workflow Finding capture channel — the human/agent lane within Run
|
|
93
|
+
Telemetry, distinct from the automatic system-signal lane. It records local
|
|
94
|
+
findings (append-only journal) and is not the owner of remit, Linear routing,
|
|
95
|
+
team assignment, or internal prioritization. "Sidecar" now names this channel,
|
|
96
|
+
not the whole telemetry surface (that is Run Telemetry / the Run Record).
|
|
97
|
+
_Avoid_: the telemetry surface, Linear sync, feedback dashboard, QA reporter
|
|
98
|
+
|
|
99
|
+
**Observation Stage**:
|
|
100
|
+
The lifecycle moment where a Workflow Finding was noticed. Observation Stage is
|
|
101
|
+
broader than the orchestration stage picker: it includes `overall`, `intake`,
|
|
102
|
+
`start`, `doctor`, `setup`, `build`, `polish`, `deploy`, `qa`, `test-order`, and
|
|
103
|
+
`next`.
|
|
104
|
+
_Avoid_: status, owner, milestone
|
|
105
|
+
|
|
106
|
+
**Findings Journal**:
|
|
107
|
+
The append-only local record of Workflow Findings for a campaign run. The
|
|
108
|
+
Findings Journal preserves observed workflow signals; summaries, deduplication,
|
|
109
|
+
and routing are derived later by internal aggregation.
|
|
110
|
+
_Avoid_: current summary, backlog, dashboard state
|
|
111
|
+
|
|
112
|
+
**Finding Capture**:
|
|
113
|
+
The act of adding a Workflow Finding to the local Learning Trail. Finding
|
|
114
|
+
Capture should be available to both Campaigns OS Operators and agents without
|
|
115
|
+
requiring internal NEXT systems.
|
|
116
|
+
_Avoid_: submission, sync, issue creation
|
|
117
|
+
|
|
118
|
+
**Learning Trail**:
|
|
119
|
+
The accumulating record of workflow signals that helps Campaigns OS improve over
|
|
120
|
+
time, now realized as Run Telemetry's Run Records (system signal + the findings
|
|
121
|
+
channel). The Learning Trail is separate from the formal proof trail recorded in
|
|
122
|
+
the Assembly Report, doctor output, and QA Verdict.
|
|
123
|
+
_Avoid_: launch evidence, stage proof, assembly status
|
|
124
|
+
|
|
125
|
+
**Campaign Run Identity**:
|
|
126
|
+
The context that ties a Run Record and its Workflow Findings to one campaign run.
|
|
127
|
+
A canonical `run_id` is the correlation and idempotency key, minted at the run
|
|
128
|
+
boundary and threaded through the run (and onto findings) so a run's signal is
|
|
129
|
+
exact, not time-inferred. Best-effort descriptive identity — Map ID, campaign
|
|
130
|
+
slug, target repo, packet path, Assembly Report path, QA run ID, source type,
|
|
131
|
+
template family — travels alongside it and may be incomplete; missing identity
|
|
132
|
+
never prevents capture.
|
|
133
|
+
_Avoid_: required metadata, primary key, campaign record
|
|
134
|
+
|
|
135
|
+
**Run Session**:
|
|
136
|
+
An ambient `run_id` resolved once for a run so that the commands a run touches
|
|
137
|
+
(doctor, harvest, findings add, run-record) share one identity without each call
|
|
138
|
+
re-specifying it. An explicit `--run-id` always wins over the session.
|
|
139
|
+
_Avoid_: global mutable state, per-command id reinvention
|
|
140
|
+
|
|
141
|
+
**Readiness Checkpoint**:
|
|
142
|
+
A durable lifecycle boundary that lets Campaigns OS say whether a campaign can
|
|
143
|
+
proceed, is blocked, or is ready with explicit gaps or waivers. `ready_with_gaps`
|
|
144
|
+
is a valid checkpoint outcome when known Source Gaps are present but the work is
|
|
145
|
+
ready enough for the next stage; unfinished TODOs remain blocking unless
|
|
146
|
+
explicitly waived. A Readiness Checkpoint is artifact-backed and resumable across
|
|
147
|
+
turns, sessions, or machines; a one-shot campaign run is only the best-case path
|
|
148
|
+
where every checkpoint is already satisfied. Checkpoints expose what was
|
|
149
|
+
handled, what was not handled, and what must be resolved next without relying on
|
|
150
|
+
chat history.
|
|
151
|
+
_Avoid_: launch readiness, session transcript, vague status
|
|
152
|
+
|
|
153
|
+
**Checkpoint Status**:
|
|
154
|
+
The shared small vocabulary used to summarize Readiness Checkpoints across
|
|
155
|
+
Campaigns OS stages: `pending`, `blocked`, `ready`, `ready_with_gaps`,
|
|
156
|
+
`ready_with_waivers`, `completed`, `completed_with_warnings`, and `skipped`.
|
|
157
|
+
`ready_with_waivers` is only a summary state; the actual accepted exception must
|
|
158
|
+
be carried as a structured Checkpoint Waiver. Stage-specific nuance belongs in
|
|
159
|
+
evidence, Source Gaps, Source TODOs, waivers, findings, and next actions rather
|
|
160
|
+
than in one-off status names.
|
|
161
|
+
_Avoid_: stage-specific status dialect, prose-only state, hidden blocker
|
|
162
|
+
|
|
163
|
+
**Checkpoint Waiver**:
|
|
164
|
+
A structured, attributed exception that lets a Readiness Checkpoint proceed
|
|
165
|
+
despite a known gap, TODO, or gate that would otherwise block the next stage. A
|
|
166
|
+
Checkpoint Waiver carries who accepted it, why, its scope, what it applies to,
|
|
167
|
+
when it was created, and either an expiry or review condition. Waivers are
|
|
168
|
+
operational and time-bound; they summarize into `ready_with_waivers` but do not
|
|
169
|
+
replace the underlying evidence, gap, TODO, or gate result. A lifecycle stage may
|
|
170
|
+
recommend or draft a waiver with evidence, but approval belongs to an
|
|
171
|
+
operator/run decision rather than the stage that found the exception.
|
|
172
|
+
_Avoid_: waived status only, permanent approval, hidden exception
|
|
173
|
+
|
|
174
|
+
**Evidence Quality**:
|
|
175
|
+
The declared strength of evidence behind a Workflow Finding, such as operator
|
|
176
|
+
report, artifact reference, artifact attachment, or system observation. Evidence
|
|
177
|
+
Quality lets useful signals enter the Learning Trail without pretending all
|
|
178
|
+
signals are QA Verdicts.
|
|
179
|
+
_Avoid_: confidence score, proof status, launch readiness
|
|
180
|
+
|
|
181
|
+
**Tiny Prompt**:
|
|
182
|
+
A skippable one-line Campaigns OS prompt that helps the operator notice the next
|
|
183
|
+
expected proof step or optionally record a Workflow Finding. Tiny Prompts must
|
|
184
|
+
not block lifecycle progress or turn into surveys.
|
|
185
|
+
_Avoid_: required survey, gate, checklist
|
|
186
|
+
|
|
187
|
+
**Finding Kind**:
|
|
188
|
+
The small operator-facing classification for a Workflow Finding, such as
|
|
189
|
+
positive signal, friction, missing prompt, blocker, docs gap, automation gap, or
|
|
190
|
+
idea. Finding Kind helps later aggregation without asking the operator to choose
|
|
191
|
+
from product-management categories.
|
|
192
|
+
_Avoid_: issue type, Linear label, priority
|
|
193
|
+
|
|
194
|
+
**Finding Author**:
|
|
195
|
+
The source of a Workflow Finding: a Campaigns OS Operator, an agent observing
|
|
196
|
+
artifacts and commands, or the system recording a deterministic lifecycle signal.
|
|
197
|
+
Agents may record observed workflow gaps, but they must not invent subjective
|
|
198
|
+
operator feedback.
|
|
199
|
+
_Avoid_: assignee, reporter, owner
|
|
200
|
+
|
|
201
|
+
**Campaigns OS Operator**:
|
|
202
|
+
A person or agent using Campaigns OS to assemble, adapt, prove, or repair a
|
|
203
|
+
campaign. Operators include internal campaign team members and future agency
|
|
204
|
+
users; they do not include shoppers or ordinary merchant-facing campaign approval
|
|
205
|
+
viewers.
|
|
206
|
+
_Avoid_: end user, shopper, customer
|
|
207
|
+
|
|
208
|
+
**Spec-Driven Campaign Development**:
|
|
209
|
+
The Campaigns OS operating model where an accurate CampaignSpec preserves the
|
|
210
|
+
campaign's core logic and makes build, checkout, upsell, and QA behavior
|
|
211
|
+
verifiable. Workflow Findings should help improve this Spec-centered flow rather
|
|
212
|
+
than collect unrelated product complaints.
|
|
213
|
+
_Avoid_: asset-first build, page-only development
|
|
214
|
+
|
|
215
|
+
**Design Source**:
|
|
216
|
+
The upstream creative/provenance input for campaign page presentation, such as
|
|
217
|
+
Figma frames, prepared HTML, a figma-sections export, existing Page Kit pages, or
|
|
218
|
+
agency-produced static source. Design Source owns visual composition, content
|
|
219
|
+
hierarchy, imagery, page-level copy, and brand presentation intent; it does not
|
|
220
|
+
own CampaignSpec commerce truth or SDK/runtime contracts.
|
|
221
|
+
_Avoid_: source of truth, design artifact, creative vibes
|
|
222
|
+
|
|
223
|
+
**Design Source Package**:
|
|
224
|
+
The public normalized Campaigns OS representation of a Design Source that Build
|
|
225
|
+
and Polish consume across source kinds. Its schema identity is
|
|
226
|
+
`campaign-design-source-package/v0`, reflecting upstream creative/provenance
|
|
227
|
+
context rather than runtime assembly proof. Every normal build has a Design
|
|
228
|
+
Source Package, with source-kind-specific depth, and a package may aggregate
|
|
229
|
+
multiple Design Sources for one campaign; it preserves provenance, presentation
|
|
230
|
+
intent, Source Gaps, Source TODOs, and source-side comparison references without
|
|
231
|
+
replacing the CampaignSpec or template runtime contracts. Its freshness is tracked
|
|
232
|
+
independently from CampaignSpec and build fingerprints because campaign logic
|
|
233
|
+
and creative source can change on different timelines. It is separate from the
|
|
234
|
+
Campaign Build Brief, which captures merchandising interpretation and business
|
|
235
|
+
questions. Missing Design Source Package or page-level mapping blocks a normal
|
|
236
|
+
build; explicit Source Gaps may produce a `ready_with_gaps` source-readiness
|
|
237
|
+
checkpoint and travel forward as known constraints, while Source TODOs mark
|
|
238
|
+
unfinished preparation unless explicitly waived. Agencies may provide loose
|
|
239
|
+
creative inputs or a prebuilt package, but Build and Polish consume the
|
|
240
|
+
normalized package contract. It is a new public artifact alongside producer
|
|
241
|
+
manifests such as `source-html-manifest`; source manifests may seed the package,
|
|
242
|
+
but they do not become the broader Design Source Package. During v0
|
|
243
|
+
compatibility, source preparation may synthesize a package from legacy
|
|
244
|
+
`packet.source_html` and source-html manifest data, but downstream Build and
|
|
245
|
+
Polish still consume the synthesized package rather than falling back to a
|
|
246
|
+
separate legacy source model. The package is referenced by the Build Packet,
|
|
247
|
+
Build Context, and Assembly Report through artifact references and fingerprints
|
|
248
|
+
rather than embedded wholesale.
|
|
249
|
+
_Avoid_: handoff notes, source adapter output, design brief
|
|
250
|
+
|
|
251
|
+
**Source Package Fingerprint**:
|
|
252
|
+
The material freshness identity of a Design Source Package, distinct from the
|
|
253
|
+
full artifact hash used for audit. Material source changes create a new Source
|
|
254
|
+
Package Fingerprint; administrative edits that do not change source readiness or
|
|
255
|
+
the comparison basis may change the full hash without changing the freshness
|
|
256
|
+
identity.
|
|
257
|
+
_Avoid_: build fingerprint, timestamp, chat-state marker
|
|
258
|
+
|
|
259
|
+
**Assembly Source Package Fingerprint**:
|
|
260
|
+
The Source Package Fingerprint recorded by Assembly for the design source
|
|
261
|
+
context used to produce the built campaign. If it differs from the current
|
|
262
|
+
Source Package Fingerprint, the build is stale before Polish begins.
|
|
263
|
+
_Avoid_: polish source proof, build hash, inferred source state
|
|
264
|
+
|
|
265
|
+
**Source Freshness Waiver**:
|
|
266
|
+
An exceptional Checkpoint Waiver that allows Polish to proceed when Assembly used
|
|
267
|
+
a stale or unrecorded Source Package Fingerprint. It must be explicit, scoped,
|
|
268
|
+
attributed, and visible in readiness readback; it does not waive missing Polish
|
|
269
|
+
Evidence.
|
|
270
|
+
_Avoid_: silent stale-source acceptance, permanent design waiver, implicit pass
|
|
271
|
+
|
|
272
|
+
**Material Source Change**:
|
|
273
|
+
A Design Source Package change that affects source readiness, Contribution
|
|
274
|
+
Coverage, provenance, presentation intent, accepted exceptions, or the visual
|
|
275
|
+
comparison basis for Build, Polish, or QA. Material Source Changes make evidence
|
|
276
|
+
against the prior Source Package Fingerprint stale.
|
|
277
|
+
_Avoid_: typo edit, generated readback rewrite, formatting churn
|
|
278
|
+
|
|
279
|
+
**Design Source Readback**:
|
|
280
|
+
A short human-readable summary carried with a Design Source Package so an
|
|
281
|
+
operator or future agent can quickly understand the package across sessions. The
|
|
282
|
+
readback summarizes included sources, Contribution Coverage, known Source Gaps
|
|
283
|
+
and Source TODOs, page mappings, screenshot/reference availability, and current
|
|
284
|
+
source-readiness state. It is owned by source preparation and generated from the
|
|
285
|
+
structured package fields; the structured fields remain authoritative. Later
|
|
286
|
+
lifecycle stages may reference it, but they do not rewrite it.
|
|
287
|
+
_Avoid_: authoritative prose, chat summary, replacement for structured package
|
|
288
|
+
|
|
289
|
+
**Source Readiness Summary**:
|
|
290
|
+
The generated top-level readiness summary carried by a Design Source Package. It
|
|
291
|
+
indexes the package's current source-readiness state, blocking reasons, gap/TODO
|
|
292
|
+
counts, waiver count, and generation time so `next`, status, and readback can
|
|
293
|
+
present source readiness consistently. Source readiness uses the sharper
|
|
294
|
+
checkpoint states `pending`, `blocked`, `ready`, `ready_with_gaps`, and
|
|
295
|
+
`ready_with_waivers`; it does not use `ready_with_warnings`. Source Gaps, Source
|
|
296
|
+
TODOs, proposed exceptions, and Checkpoint Waivers remain the authoritative
|
|
297
|
+
records; the summary is an index over them. Free-form notes may provide helpful
|
|
298
|
+
context, but notes do not affect readiness and must not hide blockers or
|
|
299
|
+
exceptions that should be typed. Low-confidence contribution mappings affect
|
|
300
|
+
readiness only when they undermine required page-level primary coverage; that
|
|
301
|
+
case becomes a Source TODO unless explicitly waived.
|
|
302
|
+
_Avoid_: authoritative duplicate, inferred-only readiness, prose-only readiness
|
|
303
|
+
|
|
304
|
+
**Stage Readback**:
|
|
305
|
+
A short human-readable summary owned by a lifecycle stage, such as Build,
|
|
306
|
+
Polish, Deploy, or QA, that explains that stage's evidence, unresolved work, and
|
|
307
|
+
next checkpoint implications. Stage Readbacks exist to feed the Campaign
|
|
308
|
+
Readiness Readback, not to become a patchwork of hidden artifacts. A Stage
|
|
309
|
+
Readback may reference the Design Source Readback, but it does not mutate source
|
|
310
|
+
preparation provenance.
|
|
311
|
+
_Avoid_: Design Source Readback edit, chat transcript, replacement for evidence
|
|
312
|
+
|
|
313
|
+
**Campaign Readiness Readback**:
|
|
314
|
+
The consolidated or just-in-time human presentation of a campaign's current
|
|
315
|
+
Readiness Checkpoint state. It draws from Design Source Readback, Stage
|
|
316
|
+
Readbacks, structured evidence, gaps, TODOs, waivers, proposed divergences,
|
|
317
|
+
deployment state, QA proof, and next actions so the operator can see what exists,
|
|
318
|
+
what matters now, and what remains blocked. Its primary form is generated live
|
|
319
|
+
from the latest authoritative artifacts; Run Records may snapshot it for audit.
|
|
320
|
+
`campaigns-os next` presents a concise just-in-time readback for the recommended
|
|
321
|
+
stage and blockers; run or campaign status presents the fuller campaign-level
|
|
322
|
+
readback. The readback has stable sections as well as prose, covering the current
|
|
323
|
+
checkpoint, readiness status, handled work, blockers, known gaps, proposed
|
|
324
|
+
exceptions, waivers, evidence references, and next actions. Evidence is
|
|
325
|
+
referenced and summarized, not embedded; detailed proof stays in the artifact
|
|
326
|
+
that owns it. Screenshots travel as references; UI surfaces may render thumbnails
|
|
327
|
+
or previews from those references, but the readback itself is not an image
|
|
328
|
+
bundle. It is a presentation layer over the authoritative artifacts, not another
|
|
329
|
+
independent source of truth.
|
|
330
|
+
_Avoid_: artifact pile, hidden sidecar, separate campaign journal
|
|
331
|
+
|
|
332
|
+
**Design Source Contribution**:
|
|
333
|
+
One source-kind-specific contribution to a Design Source Package, such as Figma
|
|
334
|
+
frames, prepared HTML, a figma-sections export, existing Page Kit pages, or
|
|
335
|
+
agency-produced static source. A template-stock contribution can intentionally
|
|
336
|
+
point to the Template Reference when no bespoke design overlay exists. A
|
|
337
|
+
contribution usually represents one producer or source group and may cover
|
|
338
|
+
multiple pages, sections, or surfaces; it carries its own provenance, coverage,
|
|
339
|
+
confidence, and source gaps or TODOs. When the contribution is renderable, it
|
|
340
|
+
carries screenshot references for available viewports or explicitly records why
|
|
341
|
+
they are unavailable. Those screenshot references describe source or reference
|
|
342
|
+
availability, not built campaign output.
|
|
343
|
+
_Avoid_: input chunk, source blob, extraction source
|
|
344
|
+
|
|
345
|
+
**Source Screenshot Reference**:
|
|
346
|
+
A source-side or reference-side visual proof attached to a Design Source
|
|
347
|
+
Contribution or Template Reference. It records what visual source was available
|
|
348
|
+
for comparison before Build or Polish; it is not a screenshot of the built
|
|
349
|
+
campaign output.
|
|
350
|
+
_Avoid_: polish screenshot, QA proof, built render
|
|
351
|
+
|
|
352
|
+
**Viewport Key**:
|
|
353
|
+
The shared campaign evidence label for a responsive capture size, used across
|
|
354
|
+
Design Source Package records, Polish Evidence, and QA observations. A Viewport
|
|
355
|
+
Key names the comparison lane, while exact dimensions and device details stay in
|
|
356
|
+
artifact metadata.
|
|
357
|
+
_Avoid_: device nickname, stage-specific size name, raw width label
|
|
358
|
+
|
|
359
|
+
**Contribution Coverage**:
|
|
360
|
+
The explicit claim of what a Design Source Contribution handles, such as pages,
|
|
361
|
+
sections, checkout styling, brand tokens, assets, or a template-stock baseline.
|
|
362
|
+
Contribution Coverage is separate from Surface Identity mapping: coverage says
|
|
363
|
+
what the source claims to provide, while mappings say where those claims attach
|
|
364
|
+
to the campaign. Contribution mappings reference canonical Surface Identity IDs
|
|
365
|
+
and carry contribution-specific details such as coverage role, confidence,
|
|
366
|
+
source references, and notes; they do not redefine CampaignSpec, route, or Page
|
|
367
|
+
Kit projection mappings. Contribution coverage role uses a small stable
|
|
368
|
+
vocabulary, while notes explain unusual cases. Contribution mapping confidence
|
|
369
|
+
uses a coarse `high`, `medium`, `low`, or `unknown` scale to express confidence
|
|
370
|
+
that the contribution maps to that surface and coverage role; it is not source
|
|
371
|
+
trust, design quality, or approval. Low confidence blocks only when the mapping
|
|
372
|
+
is required page-level primary coverage; low confidence on brand tokens,
|
|
373
|
+
reference-only, or other non-primary coverage is carried as a gap, note, or
|
|
374
|
+
readback signal as appropriate. Coverage makes handled, unhandled, and
|
|
375
|
+
intentionally absent source areas readable during the process so gaps can be
|
|
376
|
+
audited and improved over time.
|
|
377
|
+
_Avoid_: inferred coverage, implied full-page ownership, hidden gap
|
|
378
|
+
|
|
379
|
+
**Required Page-Level Coverage**:
|
|
380
|
+
The minimum Design Source Coverage for each active or mapped page in the current
|
|
381
|
+
build scope. A page satisfies it through a non-low-confidence primary design
|
|
382
|
+
contribution, an explicit Template Reference-backed template-baseline
|
|
383
|
+
contribution for template-stock pages, or an attributed Source Gap or approved
|
|
384
|
+
Checkpoint Waiver explaining why no primary design source exists.
|
|
385
|
+
_Avoid_: implicit template default, unowned page, hidden missing source
|
|
386
|
+
|
|
387
|
+
**Contribution Trust**:
|
|
388
|
+
The declared machine-readability level of a Design Source Contribution, such as
|
|
389
|
+
native, structured, rendered, or opaque. Contribution Trust says how much the OS
|
|
390
|
+
can infer from the source shape before human review; it is not launch readiness
|
|
391
|
+
or visual quality.
|
|
392
|
+
_Avoid_: quality score, approval, fidelity
|
|
393
|
+
|
|
394
|
+
**Source Gap**:
|
|
395
|
+
An attributed absence in Design Source Coverage that is allowed to travel
|
|
396
|
+
forward as a known constraint, such as an agency providing brand tokens but no
|
|
397
|
+
checkout composition. A Source Gap describes what the source does not claim to
|
|
398
|
+
provide; it is not unfinished preparation work. Polish may reference an accepted
|
|
399
|
+
Source Gap that already exists in the Design Source Package. When Polish
|
|
400
|
+
discovers a new absence, it records a proposed Source Gap or Source TODO
|
|
401
|
+
candidate for confirmation rather than accepting it silently. Source Gaps carry
|
|
402
|
+
scope and applies-to references; they attach to Surface Identity when possible,
|
|
403
|
+
but campaign-level gaps are valid when the absence applies across the campaign
|
|
404
|
+
or no specific surface is appropriate.
|
|
405
|
+
_Avoid_: intake TODO, hidden omission, silent waiver
|
|
406
|
+
|
|
407
|
+
**Source TODO**:
|
|
408
|
+
An unfinished Design Source Package preparation task, such as a missing mobile
|
|
409
|
+
screenshot for a renderable source or an unreadable reference that should be
|
|
410
|
+
captured before Build. A Source TODO means the package is not ready for normal
|
|
411
|
+
Build unless the TODO is explicitly waived with attribution. Source TODOs carry
|
|
412
|
+
scope and applies-to references; they should name affected surfaces when
|
|
413
|
+
possible, but campaign-level TODOs are valid for package-wide preparation work.
|
|
414
|
+
_Avoid_: accepted gap, source limitation, downstream polish task
|
|
415
|
+
|
|
416
|
+
**Source HTML Intake**:
|
|
417
|
+
The Campaigns OS step that normalizes prepared source HTML into a Build Packet
|
|
418
|
+
mapping. Source HTML Intake keeps producer paths, CampaignSpec pages, and Page
|
|
419
|
+
Kit target shape distinct: `source_html.pages[].path` records source provenance,
|
|
420
|
+
while `source_html.pages[].page_kit` records the target page file, route, CPK
|
|
421
|
+
`page_type`, and frontmatter projection. CampaignSpec `page_url` and legacy
|
|
422
|
+
`url` values are interpreted as Page Kit public routes during projection, not as
|
|
423
|
+
source filenames or opaque preview URLs. Source HTML Intake can populate a
|
|
424
|
+
Design Source Contribution from a producer-authored source-html manifest, but
|
|
425
|
+
the manifest remains an adapter input rather than the normalized Design Source
|
|
426
|
+
Package.
|
|
427
|
+
_Avoid_: copying manifest paths directly into Page Kit target paths, replacing
|
|
428
|
+
CampaignSpec routes with source filenames
|
|
429
|
+
|
|
430
|
+
**Adapter Decision Contract**:
|
|
431
|
+
The machine-readable record of how prepared source HTML was adapted into Page Kit
|
|
432
|
+
shape. It includes wrapper stripping, frontmatter policy, asset strategy,
|
|
433
|
+
script/style references, CTA routing, layout choice, template slice copying, and
|
|
434
|
+
commerce shell adoption so doctor can validate assembly state without relying on
|
|
435
|
+
chat history.
|
|
436
|
+
_Avoid_: undocumented adapter prose, hidden source conversion choices
|
|
437
|
+
|
|
438
|
+
**Source Divergence**:
|
|
439
|
+
An intentional recorded difference between Design Source intent and the built
|
|
440
|
+
campaign, usually because CampaignSpec/API, Template Reference, or SDK runtime
|
|
441
|
+
contracts own the surface. Source Divergence prevents Build and Polish from
|
|
442
|
+
mistaking a platform-safe difference for an unresolved fidelity defect; entries
|
|
443
|
+
may be added during intake, Build, or Polish and carry the stage that recorded
|
|
444
|
+
or confirmed them, plus optional links to the Design Source, CampaignSpec,
|
|
445
|
+
Template Reference, or build fingerprint that makes the divergence valid. Polish
|
|
446
|
+
may propose a Source Divergence when the mismatch becomes visible during review,
|
|
447
|
+
but that proposal remains unaccepted until an operator/run decision or the
|
|
448
|
+
relevant Build or Design Source owner confirms it. Accepted gaps, divergences,
|
|
449
|
+
and waivers must be explicit and attributed; Polish must not silently waive
|
|
450
|
+
source fidelity.
|
|
451
|
+
_Avoid_: bug, warning, ignored source
|
|
452
|
+
|
|
453
|
+
**Surface Identity**:
|
|
454
|
+
The stable page, section, surface, and viewport naming used to join Design Source
|
|
455
|
+
Package records, built Page Kit output, Polish Evidence, and QA observations.
|
|
456
|
+
Surface Identity exists both as a campaign-level vocabulary and as contribution
|
|
457
|
+
mapping claims: contribution mappings say which source informs which pages,
|
|
458
|
+
sections, or surfaces, while the campaign-level identity lets Build, Polish, and
|
|
459
|
+
QA refer to the same surface. Surface Identity should preserve campaign/source
|
|
460
|
+
semantics while also mapping to the Campaign Page Kit output shape Campaigns OS
|
|
461
|
+
assembles toward: page-level Page Kit mapping is expected early, while section
|
|
462
|
+
and runtime-surface output mapping may mature during Build. Page-level identity
|
|
463
|
+
is established during source preparation; Build may refine child section or
|
|
464
|
+
runtime-surface identity under mapped pages, while Polish and QA attach evidence
|
|
465
|
+
or observations to known identities instead of inventing new pages. `campaign`
|
|
466
|
+
is a reserved Surface Identity with `kind: "campaign"` for campaign-level gaps,
|
|
467
|
+
TODOs, waivers, and readback references; it is not Page Kit output. Surface
|
|
468
|
+
Identity IDs are stable human-semantic strings with labels and aliases. Opaque
|
|
469
|
+
source, DOM, or Page Kit identifiers may be recorded as external references or
|
|
470
|
+
aliases, but they are not the primary campaign vocabulary. Page-level Surface
|
|
471
|
+
Identity is distinct from CampaignSpec or Map Builder page IDs, custom page
|
|
472
|
+
names, public routes, producer page types, and Campaign Page Kit runtime
|
|
473
|
+
`page_type`; those values should be preserved as mapped attributes or aliases.
|
|
474
|
+
When a CampaignSpec page ID is stable and human-readable it may seed the primary
|
|
475
|
+
page-level Surface Identity. Otherwise source preparation derives the primary ID
|
|
476
|
+
from normalized page role plus order, while preserving the original page ID,
|
|
477
|
+
label, route, and Page Kit projection separately. The package carries Surface
|
|
478
|
+
Identity as a structured catalog of identity records, not as a bare string list,
|
|
479
|
+
so each identity can preserve labels, aliases, and mappings to source, spec,
|
|
480
|
+
route, and Page Kit projection values.
|
|
481
|
+
_Avoid_: screenshot label, prose anchor, selector-only identity
|
|
482
|
+
|
|
483
|
+
**Telemetry Consent**:
|
|
484
|
+
The machine/user-level opt-OUT that decides whether Run Records are remitted.
|
|
485
|
+
Consent belongs to the operator, not the campaign: changeable any time
|
|
486
|
+
(`telemetry status|on|off`) and overridable by the `CAMPAIGNS_OS_TELEMETRY`
|
|
487
|
+
env var (unknown values fail closed). Consent gates **remit only** — capture
|
|
488
|
+
is always local. The default is ON for the canonical NEXT endpoint only,
|
|
489
|
+
announced at remit time with the endpoint and the opt-out command; any other
|
|
490
|
+
endpoint (staging, self-hosted) stays fail-closed until explicitly
|
|
491
|
+
consented, and a malformed config file resolves OFF rather than letting the
|
|
492
|
+
default override an unreadable prior choice.
|
|
493
|
+
_Avoid_: per-finding approval, campaign-scoped consent, SILENT default-on
|
|
494
|
+
(the default is announced, never quiet)
|
|
495
|
+
|
|
496
|
+
**Remit**:
|
|
497
|
+
The consent-gated send of a Run Record to NEXT, over the same rails as QA verdict
|
|
498
|
+
publishing. Remit is non-fatal (a failed send never blocks or fails a run) and
|
|
499
|
+
idempotent on `run_id` (the endpoint upserts, so reruns do not double-count); the
|
|
500
|
+
local Run Record records `remit_attempted` / `remit_ok` / `error` so a dropped
|
|
501
|
+
send is visible. With consent on, remit is automatic and unsurprising because the
|
|
502
|
+
consent was explicit and up front.
|
|
503
|
+
_Avoid_: per-item contribution, background retry daemon, fail-the-run-on-error
|
|
504
|
+
|
|
505
|
+
**Data Boundary**:
|
|
506
|
+
What a remitted Run Record carries versus withholds. Carried: run identity (Map
|
|
507
|
+
ID, slug, template family — the join keys that make telemetry useful), structural
|
|
508
|
+
signal (doctor codes, spec-rule IDs, adapter decisions, QA disposition, finding
|
|
509
|
+
IDs), and artifact references (path, schema_version, hash, material fingerprint
|
|
510
|
+
where available). Minimized or omitted: absolute local paths
|
|
511
|
+
(relativized/hashed) and OS username. Never carried: raw artifact bodies
|
|
512
|
+
(CampaignSpec JSON, source HTML, full verdict/doctor/report bodies). This is
|
|
513
|
+
data minimization, not a secret-defense allowlist — runs use a
|
|
514
|
+
synthetic test customer and a publishable client-side key.
|
|
515
|
+
_Avoid_: raw artifact upload, shipping local paths/usernames, secret allowlist framing
|
|
516
|
+
|
|
517
|
+
**Improvement Surface**:
|
|
518
|
+
The part of Campaigns OS a signal should improve: `skill`, `cli`, `template`,
|
|
519
|
+
`design-source`, `docs`, `spec-rule`, or `platform`. Recorded as a list
|
|
520
|
+
(`surfaces[]`) with an optional `primary_surface` and confidence, because one
|
|
521
|
+
observation often touches more than one surface. This is the grown-up form of a
|
|
522
|
+
finding's `suggested_owner`.
|
|
523
|
+
_Avoid_: single-owner enum, Linear label, routing decision
|
|
524
|
+
|
|
525
|
+
**Expected Proof Step**:
|
|
526
|
+
The next verification action Campaigns OS should make visible to the operator
|
|
527
|
+
after a lifecycle stage, such as polish after build, preview deploy before QA,
|
|
528
|
+
or browser QA after deploy evidence. An Expected Proof Step is guidance, not an
|
|
529
|
+
automatic execution grant.
|
|
530
|
+
_Avoid_: auto-run, hidden gate, silent proof
|
|
531
|
+
|
|
532
|
+
**Polish Stage**:
|
|
533
|
+
The constrained post-Build repair and evidence stage for SDK-safe presentation
|
|
534
|
+
surfaces. Polish may repair visual skinning, source-fidelity, responsive layout,
|
|
535
|
+
and residue defects, but it must not change CampaignSpec/API truth, SDK-owned
|
|
536
|
+
runtime behavior, route topology, template shell adoption, or source provenance.
|
|
537
|
+
Polish may draft or recommend a Checkpoint Waiver with supporting evidence, and
|
|
538
|
+
it may propose source-reference updates for source preparation to accept, but it
|
|
539
|
+
does not approve readiness exceptions itself.
|
|
540
|
+
_Avoid_: second build, QA, launch approval
|
|
541
|
+
|
|
542
|
+
**Polish Evidence Package**:
|
|
543
|
+
The detailed evidence artifact produced by the Polish Stage, containing
|
|
544
|
+
comparison references, screenshots, issues, commands, and source/template
|
|
545
|
+
findings for the current build. It owns built-output and comparison screenshots
|
|
546
|
+
for that build fingerprint while referencing source-side screenshots from the
|
|
547
|
+
Design Source Package and baseline references from Template Reference.
|
|
548
|
+
Polish Evidence is current only when it matches both the current build
|
|
549
|
+
fingerprint and the current Source Package Fingerprint, unless a waiver records
|
|
550
|
+
why stale evidence is acceptable.
|
|
551
|
+
Unresolved issues in the package must carry a Polish Issue Classification so the
|
|
552
|
+
next checkpoint can distinguish repair work, source limits, accepted divergence,
|
|
553
|
+
waiver candidates, and work outside Polish. It includes a Polish Stage Readback
|
|
554
|
+
for session pickup, and that readback must be
|
|
555
|
+
available through the Campaign Readiness Readback rather than hidden as a
|
|
556
|
+
disconnected artifact. The Assembly Report indexes and summarizes this package
|
|
557
|
+
for lifecycle gating, and QA consumes the package for freshness and linkage
|
|
558
|
+
rather than re-running the full design-fidelity comparison.
|
|
559
|
+
_Avoid_: QA verdict, screenshot dump, assembly report replacement
|
|
560
|
+
|
|
561
|
+
**Polish Issue Classification**:
|
|
562
|
+
The required category for any unresolved Polish finding: `repair_needed`,
|
|
563
|
+
`source_gap`, `source_divergence`, `waiver_recommended`, or `out_of_scope`.
|
|
564
|
+
Classification prevents unresolved presentation work from collapsing into a
|
|
565
|
+
vague issue bucket; it tells the next Readiness Checkpoint whether to repair,
|
|
566
|
+
carry a Source Gap, accept a Source Divergence, seek waiver approval, or route
|
|
567
|
+
the work outside Polish. `repair_needed` blocks deploy and QA until it is
|
|
568
|
+
repaired, reclassified, or covered by an approved Checkpoint Waiver. A
|
|
569
|
+
`source_divergence` classification from Polish is proposed until confirmed by an
|
|
570
|
+
operator/run decision or the relevant Build or Design Source owner; a newly
|
|
571
|
+
discovered `source_gap` from Polish is also proposed unless it traces to an
|
|
572
|
+
accepted Source Gap in the Design Source Package.
|
|
573
|
+
_Avoid_: unresolved bucket, generic polish issue, hidden next action
|
|
574
|
+
|
|
575
|
+
**Doctor Check Registry**:
|
|
576
|
+
The ordered Campaigns OS list of named doctor checks. The Doctor Check Registry
|
|
577
|
+
keeps check identity, execution order, and skip predicates explicit so agents add
|
|
578
|
+
or inspect doctor behavior by choosing a deterministic check slot instead of
|
|
579
|
+
re-reading a long validation chain.
|
|
580
|
+
_Avoid_: ad hoc doctor order, hidden validation side effect, LLM-chosen check path
|
|
581
|
+
|
|
582
|
+
**Completeness Signal**:
|
|
583
|
+
A Workflow Finding that notes an expected lifecycle step was not evidenced, such
|
|
584
|
+
as build/polish evidence existing without a QA Verdict. A Completeness Signal
|
|
585
|
+
does not by itself mean the build failed.
|
|
586
|
+
_Avoid_: defect, launch blocker, failed stage
|
|
587
|
+
|
|
588
|
+
## Example Dialogue
|
|
589
|
+
|
|
590
|
+
**Developer**: "The checkout worked because the CampaignSpec was accurate, but I
|
|
591
|
+
didn't realize I was supposed to run QA afterward."
|
|
592
|
+
|
|
593
|
+
**Domain Expert**: "Capture that as a Workflow Finding. The checkout behavior
|
|
594
|
+
belongs to the build and QA artifacts; the missing QA prompt is workflow
|
|
595
|
+
friction."
|
|
596
|
+
|
|
597
|
+
**Developer**: "Should the sidecar file create a Linear issue?"
|
|
598
|
+
|
|
599
|
+
**Domain Expert**: "No. The Findings Sidecar captures the local finding. Internal
|
|
600
|
+
ops can later aggregate and route it."
|
|
601
|
+
|
|
602
|
+
**Developer**: "This feedback is about the whole run, not one command."
|
|
603
|
+
|
|
604
|
+
**Domain Expert**: "Use Observation Stage `overall`. Most findings should name a
|
|
605
|
+
specific stage, but whole-workflow signals are allowed."
|
|
606
|
+
|
|
607
|
+
**Developer**: "Should I rewrite the findings file after I learn more?"
|
|
608
|
+
|
|
609
|
+
**Domain Expert**: "No. Add another entry to the Findings Journal. The journal is
|
|
610
|
+
append-only; later tooling can summarize it."
|
|
611
|
+
|
|
612
|
+
**Developer**: "Do I need Linear access to leave a finding?"
|
|
613
|
+
|
|
614
|
+
**Domain Expert**: "No. Finding Capture is local and public-package owned;
|
|
615
|
+
internal systems can ingest it later."
|
|
616
|
+
|
|
617
|
+
**Developer**: "Should this finding be an Assembly Report warning?"
|
|
618
|
+
|
|
619
|
+
**Domain Expert**: "Only if it is stage proof. Workflow observations belong in
|
|
620
|
+
the Learning Trail and can cross-reference formal artifacts."
|
|
621
|
+
|
|
622
|
+
**Developer**: "I only know the target repo and source type right now."
|
|
623
|
+
|
|
624
|
+
**Domain Expert**: "That's enough Campaign Run Identity for capture. Add more
|
|
625
|
+
context later if it becomes available."
|
|
626
|
+
|
|
627
|
+
**Developer**: "The operator reported the Spec-driven flow worked, but there
|
|
628
|
+
is no formal evidence packet."
|
|
629
|
+
|
|
630
|
+
**Domain Expert**: "Capture it with Evidence Quality `operator report`. Useful
|
|
631
|
+
human signal belongs in the Learning Trail."
|
|
632
|
+
|
|
633
|
+
**Developer**: "Can Campaigns OS ask for feedback after QA?"
|
|
634
|
+
|
|
635
|
+
**Domain Expert**: "Yes, as a Tiny Prompt. It should be one line and optional,
|
|
636
|
+
not another form to complete."
|
|
637
|
+
|
|
638
|
+
**Developer**: "Should skipping the prompt be recorded?"
|
|
639
|
+
|
|
640
|
+
**Domain Expert**: "No. Skipped Tiny Prompts are not Workflow Findings."
|
|
641
|
+
|
|
642
|
+
**Developer**: "How much classification do I need to do?"
|
|
643
|
+
|
|
644
|
+
**Domain Expert**: "Pick the closest Finding Kind and write a short summary.
|
|
645
|
+
The structure should prevent second-guessing, not create more of it."
|
|
646
|
+
|
|
647
|
+
**Developer**: "Can an agent add findings too?"
|
|
648
|
+
|
|
649
|
+
**Domain Expert**: "Yes, when it records observed workflow gaps. The Finding
|
|
650
|
+
Author should make clear whether the signal came from an operator, agent, or
|
|
651
|
+
system."
|
|
652
|
+
|
|
653
|
+
**Developer**: "Will agency users see this?"
|
|
654
|
+
|
|
655
|
+
**Domain Expert**: "Agency Campaigns OS Operators may see Tiny Prompts and
|
|
656
|
+
Workflow Findings. Shoppers and merchant-facing approval viewers should not."
|
|
657
|
+
|
|
658
|
+
**Developer**: "What made that operator's run work?"
|
|
659
|
+
|
|
660
|
+
**Domain Expert**: "Spec-Driven Campaign Development. When the CampaignSpec was
|
|
661
|
+
accurate, the core checkout and upsell logic had rails."
|
|
662
|
+
|
|
663
|
+
**Developer**: "Will Campaigns OS send my run to NEXT automatically?"
|
|
664
|
+
|
|
665
|
+
**Domain Expert**: "Only if you've opted in. Run Telemetry asks once, up front,
|
|
666
|
+
and remits the Run Record when consent is on. Capture is always local; consent
|
|
667
|
+
gates remit only, and you can turn it off any time with `telemetry off`."
|
|
668
|
+
|
|
669
|
+
**Developer**: "Could it include my source HTML?"
|
|
670
|
+
|
|
671
|
+
**Domain Expert**: "No. The Data Boundary carries structured signal, identity,
|
|
672
|
+
and artifact references — never raw artifact bodies, and it scrubs local paths
|
|
673
|
+
and your username. The patterns are the value, not the raw dumps."
|
|
674
|
+
|
|
675
|
+
**Developer**: "Should QA just run after build?"
|
|
676
|
+
|
|
677
|
+
**Domain Expert**: "No. Campaigns OS should show QA as the Expected Proof Step.
|
|
678
|
+
Browser QA still needs the deployed URL (and SDK-origin allowlist confirmation
|
|
679
|
+
for non-localhost), but typed-card test orders have no approval gate — they use
|
|
680
|
+
global test cards that bypass the gateway; depth is the only control."
|
|
681
|
+
|
|
682
|
+
**Developer**: "Build and polish finished, but there is no QA verdict."
|
|
683
|
+
|
|
684
|
+
**Domain Expert**: "That is a Completeness Signal unless someone claimed launch
|
|
685
|
+
readiness. Record the missing proof without calling the build failed."
|