Skip to content

feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name - #172

Open
motionBuilderEric wants to merge 38 commits into
stagingfrom
eric/aligned-onboarding-v2-meta-package
Open

feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name#172
motionBuilderEric wants to merge 38 commits into
stagingfrom
eric/aligned-onboarding-v2-meta-package

Conversation

@motionBuilderEric

@motionBuilderEric motionBuilderEric commented Jul 22, 2026

Copy link
Copy Markdown

Meta and VoC Onboarding (meta-and-voc-onboarding, package version 1): Meta onboarding (Cacheth-first, three steps + Field 10 deck spec), VoC data pull, Knoweth organize, ad-performance + walkthrough skills, installable by name, corpus-search removed

Summary

Replaces the legacy Aligned Onboarding payload with the meta-and-voc-onboarding/ folder: one part per subfolder — meta/, voc-data-pull/, knoweth/, meta-ad-performance-analysis/, and onboarding-walkthrough/ — with a single combined README and a real schema-v1 package.json manifest (package version 1; versions are simple integers bumped once per package update) mapping every file. The package is registered in the repo root package-index.json, so it installs by name: a person says "install meta-and-voc-onboarding" and Runneth runs package intent add-optional meta-and-voc-onboarding + package sync - no GitHub link, artifacts fetched from GitHub, durable intent across VM rebuilds, fleet auto-updates (updatePolicy: auto), clean uninstall. The canonical install message carries the kickoff clause ("...then read /agent/brain/meta-and-voc-onboarding/post-install.md and execute its install-time sequence in this conversation" - exact copy-paste text in the package README), so the installing conversation runs the full setup end to end; an activation package instruction staged with the files backstops later sessions. Measured end-to-end on staging, install-to-gap-questions went from 16m08s to 10m47s versus the old LLM-copied install-config.json flow. Creative content is Cacheth-first (no per-creative files anywhere), the Meta flow runs as three steps (Creative Attributes → Account Context Brain → Validation) with Field 10 as the deck spec, 17 VoC platforms get standardized raw-data pulls with daily sync routines, Knoweth gets an organize-the-brain part grounded in the real retrieval wiring, and the corpus-search/ tool is removed. This targets the staging deployment, where retrieval runs on Knoweth and creative summaries live in Cacheth, so nothing in the package builds or depends on a local search index.

What changed

Meta part (meta/), three steps plus two supporting references:

  • meta-creative-attributes-playbook.md — Step 1 (renamed from Creative Attribution: the step establishes attributes of the creative, not spend attribution). The creative-content-layer contract plus naming decode: creative content lives in Cacheth (the local creative cache), queried via Knoweth pre-context injection first, then the motion cache CLI (search-summaries / get-creative; local, no API call). No per-creative files are written. The decode is a handoff: detected provisionally here (including where product tokens live across name levels) and folded into the Account Context Brain (Field 4) on confirmation.
  • meta-account-context-brain-onboarding-package.md — Step 2, v1.31. Nine required interpretation fields plus Field 10 (the deck spec), opening brand frame, closing TLDR. Field 4 owns the confirmed naming decode and writes the operational decoder to /agent/brain/meta/naming-decoder.json (typed positions, query fields, _VALUE_ filter patterns, LP-reference decode); it also detects and confirms where product names live. Field 9 is structured around four captures (ranking metric, CPA target, winner/cut criteria incl. spend floor, default reporting window). Field 10 (reporting structure + marketing calendar) synthesizes from Fields 4/7/9 with no new pull — it gates the validation deck, not the question loop, is offered as fill-in Step 5 once its inputs confirm, and is saved as the deck-spec section of account-context.md. The fill-in presentation has a required three-part output schema (opening frame, field sections, closing TLDR) with a literal skeleton and pre-send checklist — structure fixed, content account-specific. The "at a glance" section can carry a one-line answer-register note written by validation's register corrections. Persists to /agent/brain/meta/account-context.md with a read-before-performance guard merged into /agent/user.md.
  • meta-validation-onboarding-package.md — Step 3, v1.10. The answer-and-confirm loop with the show-the-work rule (each answer states which filter, signal, and name level it used), the show-the-creatives rule (referenced creatives render as a gallery per the Data-Query Guide contract), register corrections (how an answer is pitched is correctable like any fact; standing preferences persist to account-context.md), and a name-level probe starter question ("show me all our [product] ads"); validation.md written incrementally after every confirmed answer so interrupted validations resume instead of restarting; starter question 4 uses neutral testing-vs-scaling language with a single-pool fallback; the weekly deck build pre-filled from the Field 10 deck spec (no deck without it — an unconfirmed spec runs its two beats at deck time; questions-only customers never need it); lock-in (deck approval, refresh routine, Slack); and the MVCE gate, which ends with an explicit handoff to the Knoweth organize part. Validation runs as a training loop: every piece of feedback routes through a durability test (judgment rules heal ACB fields, standing preferences persist to the register note or Field 10, current-state facts shape the answer only, one-offs revert on refresh), and deck change requests are context corrections — the deck regenerates from context and is never hand-edited. Gates on cache coverage, not files.
  • motion-cli-data-query-guide.md — the canonical contract for Motion CLI pulls, now Meta-only (TikTok insights, brand-specific metric gotchas, and the workspace-goal / spend-threshold commands removed). New "Which name level to filter on" section: product/theme words legitimately cascade across campaign, ad set, and ad names; bare product names default to adName + includes; never silently swap levels. Adds the WHAT-vs-WHY evidence split (live metrics answer what; Cacheth creative content and VoC answer why, with ad comments bridging the two; metrics pick the set, content explains it), the presenting-creatives contract (creatives render as a gallery of cards with media from the Cacheth record's url — the insights mediaUrl is often null on ASC — and names always decoded through naming-decoder.json), and the answering-posture section (judgment over rules: report data-answerable questions plainly, offer interpretation instead of dumping it, respect mode signals like "just the numbers"). Performance metrics are pulled live, never stored.
  • cacheth-command-reference.md — the flag-level contract for the five motion cache commands. motion cache status runs first as a one-shot access check; exports are a two-hop flow (the command's workdir wrapper file carries .providers.<provider>.path pointing at the JSONL corpus in Cacheth's own storage); transcripts and AI glossary tags exist only on the full record via get-creative — export, search, and Knoweth injection are summary-level (ad metadata, copy, media URLs, summary text). Cacheth itself is a hydration layer behind the CLI, transparent to the agent; Knoweth indexes the summary artifacts generated from it, never the complete records.

VoC Data Pull part (voc-data-pull/):

  • SKILL.md plus references/platform-recipes.md and four output templates, installed to the skills root (/agent/.agents/skills/voc-data-pull/). Pulls raw voice-of-customer data — reviews, support conversations, community posts, ad comments — from 17 platforms (Judge.me, Trustpilot, Yotpo, Junip, Okendo, Stamped, Reviews.io, Gorgias, Intercom, Zendesk, Klaviyo, Attentive, Gong, Hotjar, Discord, YouTube, Reddit, plus Meta ad comments) into standardized files under /agent/brain/data-sources/voc/<platform>/, one id-keyed file per item. Coverage is by availability (OAuth, stored API key, or Motion native), with a raw-VoC save exemption and the Reddit full-window contract.
  • Recipes are resilient by mandate (Step 2): the live API is the truth and a stale recipe never stops a pull — adapt field names, endpoints, and pagination from real responses, stop only when external_id/created_at genuinely don't exist. Docs are single-sourced: per-platform evidence levels and caveats live only in each recipe's header (Junip live-verified, Yotpo since_date corrected, the eight new platforms doc-grounded), and the coverage contract (12-month window, page-cap resume, coverage reporting) is owned solely by SKILL.md's hard boundaries.
  • Setup runs at post-install for every reachable platform, or on request afterwards: one daily routine per platform (voc-sync-<platform>, 6am), first run backfills 12 months in the background, daily runs pull only new items. Pulls never run inside the installing conversation.

Knoweth organize part (knoweth/):

  • knoweth-organize-onboarding-package.md — the cross-cutting organize-the-brain part: after the account questions are answered and content has landed, organize retrieval (shared content in the global lane, sliced with tags and a naming decoder) and hold it with two sentinel guard blocks merged into /agent/user.md. Grounded in the real harness wiring: only global, user:<userId>, and project:<workspaceId> are queried today; data-source-family lanes are a documented forward path gated on a harness change. Durable done-marker: /agent/brain/_tag-vocabulary.md. v1.1: gate 2 gains a file-based coverage fallback for VoC data that landed without a sync routine.

Meta Ad Performance Analysis skill (meta-ad-performance-analysis/):

  • Diagnostic framework for one ad, a set of ads, or the account in general, installed to the skills root: primary KPI first, efficiency against the account's own averages, then the funnel trace (first frame retention, thumbstop, hold rate, engagement, CTR outbound, conversion rate, AOV); across many ads, group by optimization goal and rank by primary-KPI efficiency before diagnosing, tying every funnel diagnosis to what the creative actually says and shows. Output renders analyzed ads as a gallery with decoder-normalized names. Interpretation comes from account-context.md (guard-enforced), metrics from live CLI pulls, name filters through the confirmed decode. On-demand only.

Onboarding Walkthrough skill (onboarding-walkthrough/):

  • The presentation layer for onboarding, installed to the skills root: post-install ends by asking "Are you ready to begin your onboarding?", and the walkthrough — opening brand frame, field-by-field findings with the gap questions only a human can answer, closing TLDR — fires only on a human's yes to that invitation or an explicit ask to begin/resume onboarding. Outside that, nothing self-runs.

corpus-search removed:

  • corpus-search/ deleted entirely. Root README.md and MIGRATION.md updated so the compatibility set is now just building-integrations; manifest-name references corrected to package.json. The removed payload stays recoverable from archive/full-library and the pre-cleanup tag.

Install mechanics (package manager):

  • install-config.json is gone; meta-and-voc-onboarding/package.json (schema v1, version 1, categories: [], installPolicy: manual, updatePolicy: auto, uninstallPolicy: allowed) maps every doc, the three skills, the staged guard files, and the activation instruction. Registered in package-index.json (source github at main). One package-manager call stages everything deterministically; package install "github:...#<branch>" remains only as the branch-testing path.
  • The four /agent/user.md guard blocks ship as ready-made staged files (guards/, byte-identical to the blocks embedded in the docs), merged in one whole-file Write — byte-for-byte, workspaceId substituted, with a mandatory pre-write check that the base document and each sentinel pair appear exactly once.
  • The repo-only meta-and-voc-onboarding/CHANGELOG.md (never staged to customer brains) is a single v1 entry describing the package as it ships; each staged doc keeps its version header.

Activation model (instructions/activation.md + post-install.md):

  • The canonical install message tells the agent to read post-install.md and execute its install-time sequence in the same conversation; an activation package instruction staged with the files also lands in the agent's standing instructions as a backstop for later sessions. The sequence is idempotent (the guard sentinels double as the ran-already marker): reachability check (OAuth connections, stored secrets, Meta workspace), VoC sync setup for every reachable platform with first runs kicked (a connected Meta workspace counts — voc-sync-meta-ads via ad comments), the guard merge, Creative Attributes, and the Account Context Brain autofill running silently (results persisted to the brain); it ends by asking "Are you ready to begin your onboarding?" — the findings presentation and gap questions fire only on a human's yes, via the onboarding-walkthrough skill. What the guards gate (Knoweth organize, Meta validation) still fires later on its own gates. One status line per part; if nothing is reachable, it says so and stops (no polling — later connects are set up on ask).
  • Post-install is tuned for staging VMs: canceled routines are terminal (never resumed), the edit/patch tool is never used, existing files are read-then-written-whole.
  • Post-install's checks are mechanical, not judgment calls: stored secrets are probed per documented key (secret run --env KEY=<SECRET_KEY> -- true or a bounded secure-fetch run — the secret store has no list command, and a refused directory read proves nothing), the guard merge resolves the conversation's active Meta workspace and stamps it into the guard headers only (Knoweth project:<workspaceId> lane syntax stays literal), the Creative Attributes step reads the playbook at its staged path (/agent/brain/meta-and-voc-onboarding/meta-creative-attributes-playbook.md) and never improvises if it is unreadable, the account-context brain file is written as a prose reference document and indexed in /agent/INDEX.md at install, and the end-of-run readiness report is template-only status lines — no metrics, counts, or decoder detail in the report or the narration around it.
  • Creative ingestion still runs only through the Cacheth sync, and the ad-performance skill stays on-demand; nothing in the package writes per-creative files to the brain.

Notes for reviewers

  • Family/business lanes need the harness to layer configured lanes into the requested read set (resolveKnowethReadLanes requests exactly [user, project:<workspaceId>, global] today). Needs an owner; fits PDEC-9225.
  • The VoC pull flow was E2E-tested live on a fresh sandbox: skill install, routine creation, 12-month backfill, and an incremental re-run verified.
  • Field 10's marketing-calendar detection reads campaign-type and launch-date positions from the account's naming-decoder.json — never an assumed offset; if the decoder carries neither, it asks for the calendar directly.
  • This PR leaves scripts/validate-runneth-package-index.mjs untouched — the validator update for the current contract (integer versions, empty categories, github source) lands separately in fix(packages): align package index validation contracts #184. The fleet-approval gate still applies: this PR registers a managed-sync package, so it needs the runneth-fleet-change-approved label after core engineering approval (not self-applied).
  • Known platform bugs (fixes belong in agent-builder): the Edit tool fails validation on staging VMs, and /agent/user.md is blocked from Bash (hence the single-Write guard merge).
  • The package describes desired state only and never instructs workarounds: if an install fails, both READMEs tell the agent to report the exact error and stop - never hand-copy staged files or edit state under /agent/.runneth/packages/. Hand-written package state has produced invalid installed.json entries in the field that blocked every later turn on the VM.

Staging validation

  • End-to-end branch installs on staging, each graded from the conversation trace (Runneth thinking + tool calls) against a 13-point rubric covering install mechanics, the unprompted post-install sequence, the Cacheth decode flow, guard placement, and report discipline: Motion Crew, Buoy (4,339 cached creatives), Huel (766), Huel EU, Tentbox, and ecko digital.
  • Final clean-slate re-runs (full uninstall first) on the two cache-enabled workspaces: Huel EU 13/13, Motion Crew 12/13 — the single miss was trace observability in a contaminated conversation, not package behavior.
  • A sterile fresh-conversation run confirmed the activation model end to end: the post-install sequence fires unprompted on the first turn after install (package instructions inject at turn start), reads the staged playbook, and runs the Cacheth flow.
  • A cache-disabled sandbox exercised the documented error path: one motion cache status call, blocker recorded, step stopped with no retry loops — exactly as the playbook prescribes.
  • Platform-level issues observed and deliberately out of scope (fixes belong in agent-builder): package uninstall leaves merged guard blocks and brain files on disk, and transient harness errors that retried cleanly.

Test plan

  • Package index validation passes once fix(packages): align package index validation contracts #184's validator lands
  • The canonical install message (package intent add-optional meta-and-voc-onboarding + package sync + the kickoff clause) stages every file and runs the post-install sequence in the same conversation
  • Confirm the post-install run creates one voc-sync-<platform> routine per reachable platform, kicks backfills in the background, and never pulls VoC data in-conversation
  • Confirm no path in the staged docs triggers automatic creative ingestion, and that a VM with nothing reachable gets a stop-and-say-so (no polling)
  • Confirm the four guard blocks merge at post-install and Knoweth organize / Meta validation still wait on their own gates
  • Confirm the Knoweth organize step runs once (gated on _tag-vocabulary.md) behind its already-merged guard blocks
  • Confirm the validation question loop starts on the nine confirmed fields without Field 10, and the deck build refuses until Field 10 is confirmed (running its two beats at deck time)
  • Confirm the name-level probe answer states which name level it filtered

…docs, drop corpus-search

Replaces the Aligned Onboarding payload with the v2 package: Creative
Attribution playbook (runs first, explicit request only), Account Context
Brain onboarding package v1.21, new Meta Validation package v1.1, and the
Motion CLI data-query guide. Removes the corpus-search tool and its
references; retrieval runs on Knoweth with per-creative summaries in Cacheth
(staging). Nothing self-runs on install: the attribution build and its
maintenance never auto-grab creatives and store summary files in the brain.
Drops the orchestration skill and rebuilds install-config.json (v2.0.0).
@motionBuilderEric
motionBuilderEric marked this pull request as ready for review July 22, 2026 23:05
@motionBuilderEric
motionBuilderEric requested a review from a team July 22, 2026 23:05
…ect-time auto-install and self-activating daily sync (#159)

* feat(package): add voc-data-pull v0.1.0, auto-installed on VoC platform connect

Installer package that pulls raw voice-of-customer data - product reviews,
support conversations, and ad comments - from a connected platform into
standardized files in the org brain: one file per review/ticket/comment,
flat metadata header + body, untouched platform payload preserved in every
file (PDEC-9193, PR 1 of 2).

- skill/SKILL.md: the pull workflow - resolve the connection path
  (Pipedream OAuth via integrations proxy, stored secret via secure-fetch,
  Motion native for Meta ad comments), follow the platform recipe, write
  files under /agent/brain/data-sources/<platform>/. Hard boundaries:
  read-only against platforms, bounded pulls (12-month default, page caps),
  never write into /agent/brain/integrations/<source>/, author_contact
  nulled pending the PII policy call.
- skill/references/platform-recipes.md: per-platform endpoints, pagination,
  discovery steps, and unified-template field mappings with evidence
  levels. Judge.me/Gorgias/Intercom live-verified; Trustpilot/Yotpo
  doc-grounded pending first connects; Junip blocked on a dead key;
  Okendo/Stamped are secrets-path (no Pipedream app exists); Meta ad
  comments via motion meta creative-comments.
- skill/templates/: copyable review and support-conversation file skeletons
  (support shape follows the Ramy Brook Gorgias precedent:
  daily/<date>/ticket-<id>.md, metadata top, full conversation below).
- package.json manifest: one directory resource installing the skill to
  agent_skills/voc-data-pull; installPolicy auto so matching intent
  installs with no manual step, updatePolicy auto so recipe fixes roll out.
- package-index.json: first indexed package. Categories list one
  integration:<slug> per platform (judge_me, trustpilot, yotpo, junip,
  gorgias_oauth, intercom, okendo, stamped) because the VM reconciler
  matches literal connected slugs - no invented family category.
- scripts/validate-runneth-package-index.mjs: aligned with the current
  package-manager contract (package.json manifests, installPolicy,
  packageManagerVersion 1|2, manifest v2 tasks/workflows, backend-github
  sources). Same content as #152; whichever merges first rebases clean.
- Card files (use-case.json, README.md, marketing.md) included per repo
  structure; slug added to catalog excluded[] - not a public-site use case.

CI note: the fleet-approval gate fires (new auto-installable package) and
needs the runneth-fleet-change-approved label after core engineering
approval.

* refactor(voc-data-pull): move under packages/ per installer package convention

* fix(voc-data-pull): resolve review findings - id-keyed ticket paths, honest date-bound claims, PII disclosure, fleet-gate fingerprint

* fix(voc-data-pull): render metadata as fenced yaml block instead of frontmatter

* feat(voc-data-pull): human-readable file layout - headline, bold-label header, collapsed metadata; drop raw payloads

* feat(voc-data-pull): backend-github source + activation package instruction

Switch the index entry's package source to backend-github per repo package
conventions, so VM artifact fetches route through the backend cache instead
of raw GitHub (bump indexRevision to 2026-07-22-01).

Add a package_instruction resource (instructions/activation.md) that lands
in the agent's standing instructions on install: Runneth offers the first
pull when a covered VoC platform is connected and no data-sources pull
exists, runs the skill on request, and never starts a pull without user
confirmation. Install stages files only; this closes the awareness gap
without auto-running anything.

* fix(voc-data-pull): date window is the coverage contract - page cap is per-run batching, never a coverage limit

* feat(voc-data-pull): add Reddit - integration:reddit category, community_post source type, recipe + template

* feat(voc-data-pull): routine-based recurring sync via activation instruction

activation.md: routine absence triggers setup - creates voc-sync-<platform> (cron 0 6 * * *), kicks the backfill run, silent-success/delivered-failure delivery, Junip key gate; pulls never run in-conversation. SKILL.md: new Recurring sync runs section owns the incremental window (empty folder = trailing 12 months, else newest created_at minus 2 days, updated_at for tickets), multi-account iteration, disconnect no-op; dropped the confirm-before-starting gate. README updated to match.

* fix(voc-data-pull): review fixes - id-keyed contract, per-source write policy, routine routing

SKILL.md: the id-keyed filename contract now survives existing folder conventions (adopt surrounding layout, keep id-keyed names); explicit re-pull write policy per source type (reviews skip, tickets overwrite on fresher updated_at, comments/posts overwrite inside the pull window since engagement mutates); user pull requests route through the sync routine; description covers Reddit and community posts. activation.md: routine prompt defers run behavior to the skill's recurring-sync rules instead of restating it; first kick described as a sync run whose window the skill determines. README: drop the stale no-automatic-post-install-trigger gap, describe the header shape directly, point the platform list at the Step 1 table.

* fix(voc-data-pull): move output to data-sources/voc/<platform>/ with flat type-prefixed filenames

* feat(voc-data-pull): manual install policy, ask-only sync setup

installPolicy flips to manual - the team installs per VM (package intent add-optional voc-data-pull + package sync); updatePolicy stays auto so installed copies track main. Setup is strictly manually triggered: the recurring-sync procedure (routine-absence check, routine add with cron 0 6 * * *, first-run kick, Junip gate, never pull in-conversation) moves into SKILL.md and runs only when asked, directly or via an onboarding run - nothing happens just because a platform is connected. The activation instruction slims to a pointer stating the same. Once set up, the daily routine refreshes data on its own. Categories retained for a future auto-install flip.
@motionBuilderEric motionBuilderEric changed the title feat(aligned-onboarding): replace v1 package with v2 Meta onboarding … feat(aligned-onboarding): v2 Meta onboarding package + VoC data pull, corpus-search removed Jul 23, 2026
…amily lanes as forward path) (#175)

* feat(aligned-onboarding): add Knoweth organize part

* chore(aligned-onboarding): register knoweth part in install-config (v2.2.0)

* docs(aligned-onboarding): add Knoweth organize step to run order

* feat(knoweth): expand organize part with save routing, decide-lanes/config, standard specs, front-matter, repair, validation, gotchas (option B, consistent)

* feat(knoweth): v1.0 - de-draft, activation MERGE INSTRUCTIONS, why-not-in-Knoweth, no-Knoweth-aware, user/workspace lane scenarios, org-type adaptation, standard-spec detail, maintenance section

* feat(knoweth): activation checklist, prod/pre-Knoweth note, org-type detection step

* docs(aligned-onboarding): make Knoweth run-order step name both guard merges

* feat(aligned-onboarding): v2.3.0 - Cacheth is the creative system of record, no per-creative brain files

- Rewrite the Creative Attribution playbook as the creative-content-layer contract: what Cacheth holds per creative, the query paths (Knoweth injection first, then the motion cache CLI), and the naming decode - all local, no API calls, nothing written to the brain
- Fold the naming decode into account-context.md Field 4 (no separate taxonomy file); Field 4 starts from the Step 1 provisional table
- Reframe per-creative-file rules from prohibition to ownership: person-requested snapshots allowed, sweep asks before archiving
- Validation (v1.3) gates on cache coverage instead of files and adds the show-the-work loop rule
- Upgrade the Knoweth answer standard: read the naming decode before name filters, route structural vs creative questions by signal, frame performance + VoC as one system, state filter/signal/unconfirmed on analytical answers
- Stage the Cacheth command reference beside the Data-Query Guide; reconcile all cache command syntax against it

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: rachelgrant27 <rgrantsteinkrauss@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@motionBuilderEric motionBuilderEric changed the title feat(aligned-onboarding): v2 Meta onboarding package + VoC data pull, corpus-search removed feat(aligned-onboarding): v2 onboarding folder - Meta (Cacheth-first), VoC data pull, Knoweth organize; corpus-search removed Jul 24, 2026
rachelgrant27 and others added 5 commits July 24, 2026 13:44
…ributes, add name-level filter disambiguation, trim Data-Query Guide to Meta-only

Creative Attributes describes attributes of the creative, not spend
attribution. New name-level contract closes a live failure mode where
product names were read as campaign references: the Data-Query Guide
gains a "Which name level to filter on" section, Field 4 (v1.22)
detects and confirms where product names live per account, the Step 1
decode hands over provisional token placement, and validation (v1.4)
probes the read with a "show me all our [product] ads" starter
question. Data-Query Guide drops the TikTok insights section, the
brand-specific metric gotchas, and the workspace-goal /
spend-threshold commands the package's scope rules already forbid.

Co-authored-by: Cursor <cursoragent@cursor.com>
…23 (naming decoder JSON, Field 9 four captures)

Reconciles parallel work authored against the pre-merge base:

- Field 4 writes an operational naming decoder to /agent/brain/meta/naming-decoder.json:
  typed positions (segment_filter / context_only / unique_id / metadata_do_not_filter)
  mapped to Meta query fields, LP-reference decode (RLP/LP/CAP, do-not-filter), and the
  _VALUE_ filter-translation rules. Field 4 stays the interpretation owner; the decoder
  is its appendix, referenced from account-context.md, not embedded
- Field 9 restructured around four captures: ranking metric, CPA target (commentary,
  not a filter), winner/cut criteria applied only to explicit winner/cut questions
  (spend floor, min days, optional tiers with the rank-then-classify rule), and the
  default reporting window; supersedes v1.21's mandatory always-ask spend-floor script
- Merged with the v1.22 product-name-placement additions and the Step 1 provisional
  decode handoff; playbook, README, Knoweth answer standard, skeleton, and validation
  updated to point at the decoder

Co-authored-by: Jose <jose@motionapp.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…l referenced by the 2.4.0 install entry

Co-authored-by: Cursor <cursoragent@cursor.com>
…k-sources named, raw-VoC save exemption, Reddit full-window contract
…as ACB v1.24 + validation v1.5; README covers the validation step

Field 10 (reporting structure and marketing calendar) synthesizes from
Fields 4, 7, and 9 - no new Motion pull - with an auto-detected
calendar from the naming decoder's campaign-type and launch-date
positions (read from naming-decoder.json, never an assumed offset) and
four standard deck sections as a starting hypothesis. Scope rule:
Field 10 gates the deck, not validation - the question loop runs on
the nine required fields; no deck without a confirmed Field 10, and an
unconfirmed spec runs its two beats at deck time. Validation v1.5
pre-fills the deck build from the spec, leads the deck-first door with
it, and anchors starter questions 2 and 4 in the confirmed dimensions
and calendar. Jose's stale-base regressions (Creative Corpus paths,
missing product-name placement and tier rule) were discarded.

Also reconciles the README with Eric's operational intro: adds the
missing Meta Validation detail section, the validation step in the
install/run order, and the validation-is-the-catch relation bullet.

Co-authored-by: Cursor <cursoragent@cursor.com>
@rachelgrant27 rachelgrant27 changed the title feat(aligned-onboarding): v2 onboarding folder - Meta (Cacheth-first), VoC data pull, Knoweth organize; corpus-search removed feat(aligned-onboarding): v2 onboarding folder - Meta three steps + Field 10 deck spec (Cacheth-first), VoC data pull, Knoweth organize, ad-performance skill; corpus-search removed Jul 24, 2026
motionBuilderEric and others added 4 commits July 24, 2026 15:22
… pull to 17 platforms

Add a post_install trigger to install-config.json (v2.5.0) backed by a new
post-install.md: installing the package now automatically runs the reachability
check, sets up the recurring VoC sync for every available platform (backfills
kicked in the background), and starts the Meta Creative Attribution and Account
Context Brain steps - zero human prompt required. Knoweth organize still fires
from its own gates. README's trigger section is rewritten to describe this
automatic sequence, with per-part fire-at-install vs on-demand labels, and VoC
wording fixed from connected to available (stored keys and Motion native
count).

VoC skill: expand coverage from 9 to 17 platforms with doc-grounded recipes for
Zendesk, Klaviyo, Attentive, Gong, Hotjar, Discord, YouTube, and Reviews.io;
fold in registry live-probe learnings (Junip unblocked and live-verified, Yotpo
since_date is the real date bound, Trustpilot/Klaviyo/Gong/Gorgias corrections).
Add the Step 2 resilience mandate: the live API is the truth and a stale recipe
must never stop a pull. Single-source the docs - per-platform evidence and
caveats live only in recipe headers, and the coverage contract (12-month
window, page-cap resume, coverage reporting) is owned solely by SKILL.md's
hard boundaries; the stale updated_at_min references are gone.
…ecipe list - unknown platforms pull live-adapted

An unknown VoC platform is never skipped. The skill's scope gate changes
from "is it on the covered list" to "is the data customer voice": any
reachable reviews/support/survey/community platform with no recipe resolves
its connection path like the others (proxy or secure-fetch with the
registry guide's auth shape) and pulls through a new no-recipe path in
Step 2 - find the listing endpoints from the live API and docs, discover
pagination from the response, map the real payload onto the unified
record, pull the raw data you find, and report "no recipe - live-adapted"
with the calls used so a recipe can be written from the run. A missing
recipe is never a reason to stop; skipped can only mean not reachable,
not VoC, or dead auth.

Priority stays with the known platforms: recipe'd platforms are handled
first, and a platform that has a recipe is always pulled through its
recipe, never freelanced. Hard boundaries (read-only, 12-month window,
id-keyed files, PII null) and the output contract apply identically to
no-recipe pulls. Sync setup and the key-auth gate cover no-recipe
platforms; post-install's reachability check and the README state the
scope rule; the recipes header points platforms without a section at the
no-recipe path.
…T-vs-WHY evidence split, ACB fill-in output schema + Field 10 wiring

Rolls up v2.8.0-2.9.0 (rebased over Eric's v2.7.0 auto-fire + 17-platform VoC push): creatives always render as a gallery with decoder-normalized names (Data-Query Guide contract, validation v1.6 loop rule, skill output); the ad-performance skill's trigger broadened from single-ad to ads in general with an Analyzing Across Ads section; ACB v1.26 adds the three-part required output schema for the fill-in presentation and wires Field 10 into the flow and saved file (Step 5, deck-spec section); golden rule 10 splits evidence - live metrics answer WHAT, Cacheth creative content and VoC answer WHY; audit cleanup (single-ad README label, stale workspace-setup intro).

Co-authored-by: Cursor <cursoragent@cursor.com>
…xes, changelogs relocated to repo-only CHANGELOG.md

- v2.9.1: WHAT-vs-WHY section trimmed to evidence homes + pairing principle
- v2.10.0: answering-posture guidance (judgment over rules) in the Data-Query Guide; validation v1.7 register corrections; ACB v1.27 answer-register note
- v2.11.0: validation v1.8 autosave/resume, MVCE-to-Knoweth handoff, Q4 rework with single-pool fallback; knoweth v1.1 gate-2 file-based VoC fallback; gallery mediaUrl warning
- v2.11.1: per-doc changelog histories moved out of staged docs into aligned-onboarding/CHANGELOG.md (maintainer-only, never staged to customer brains)

Co-authored-by: Cursor <cursoragent@cursor.com>
…name, deterministic fast install (#179)

* feat(aligned-onboarding): deterministic install via package.json manifest + staged guard files

Replace install-config.json with a real package manifest so 'package install'
stages all files mechanically in one call. Ship the four /agent/user.md guard
blocks as ready-made staged files under guards/ merged in one full-file write
at post-install. No behavior changes to any part.

* fix(aligned-onboarding): fire post-install from activation prompt context; mandate github: ref form

* perf(aligned-onboarding): scripted guard merge, kicked-run checklist, no edit tool on staging VMs

* feat(aligned-onboarding): register as indexed package for intent add + sync install lane

* fix(aligned-onboarding): single-Write guard merge with anti-duplication check; always create voc-sync-meta-ads; persist autofill

* docs(aligned-onboarding): headline install-by-name from the package index

* feat(aligned-onboarding): v2.9.0 - presenting-creatives contract, WHAT-vs-WHY evidence split, ACB fill-in output schema + Field 10 wiring

Rolls up v2.8.0-2.9.0 (rebased over Eric's v2.7.0 auto-fire + 17-platform VoC push): creatives always render as a gallery with decoder-normalized names (Data-Query Guide contract, validation v1.6 loop rule, skill output); the ad-performance skill's trigger broadened from single-ad to ads in general with an Analyzing Across Ads section; ACB v1.26 adds the three-part required output schema for the fill-in presentation and wires Field 10 into the flow and saved file (Step 5, deck-spec section); golden rule 10 splits evidence - live metrics answer WHAT, Cacheth creative content and VoC answer WHY; audit cleanup (single-ad README label, stale workspace-setup intro).

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(aligned-onboarding): v2.11.1 - answering posture, field-audit fixes, changelogs relocated to repo-only CHANGELOG.md

- v2.9.1: WHAT-vs-WHY section trimmed to evidence homes + pairing principle
- v2.10.0: answering-posture guidance (judgment over rules) in the Data-Query Guide; validation v1.7 register corrections; ACB v1.27 answer-register note
- v2.11.0: validation v1.8 autosave/resume, MVCE-to-Knoweth handoff, Q4 rework with single-pool fallback; knoweth v1.1 gate-2 file-based VoC fallback; gallery mediaUrl warning
- v2.11.1: per-doc changelog histories moved out of staged docs into aligned-onboarding/CHANGELOG.md (maintainer-only, never staged to customer brains)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(aligned-onboarding): v2.12.0 - unify content lane (2.11.1) with installer lane (2.8.4)

---------

Co-authored-by: rachelgrant27 <rgrantsteinkrauss@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@motionBuilderEric motionBuilderEric changed the title feat(aligned-onboarding): v2 onboarding folder - Meta three steps + Field 10 deck spec (Cacheth-first), VoC data pull, Knoweth organize, ad-performance skill; corpus-search removed feat(aligned-onboarding): v2 Meta onboarding package - installable by name Jul 25, 2026
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from 335dfe4 to 19a28d6 Compare July 25, 2026 19:47
motionBuilderEric and others added 2 commits July 25, 2026 12:58
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from 77adbdb to fce81c3 Compare July 26, 2026 00:36
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from dc7b529 to 8f58f3f Compare July 26, 2026 01:23
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from 0bca653 to 9c5da87 Compare July 26, 2026 02:44
motionBuilderEric and others added 4 commits July 25, 2026 20:15
… on a human's yes

- new onboarding-walkthrough skill (v1.0) owns the fill-in presentation; fires on "Are you ready to begin your onboarding?"
- ACB package (v1.29) drops the output schema + Steps 2-5, becomes the pure data layer; v1.28 adds format-per-data and the Field 4 inline decoder table rule
- post-install autofills and persists silently, ends with the verbatim invitation
- account-context guard v2 offers the walkthrough; Creative Attributes scope confirmation silent inside post-install
- package.json + package-index.json synced to 2.13.0

Co-authored-by: Cursor <cursoragent@cursor.com>
…north-star" renamed to plain language

- post-install step 6 gains a literal contract: one status line per part + question count, verbatim skeleton, no findings or question text before the invitation (first 2.13.0 field run leaked both)
- ACB v1.30 / validation v1.9: "north-star" -> "primary conversion event" and "priority campaign(s)" in all customer-facing phrasing
- package.json + package-index.json synced to 2.13.1

Co-authored-by: Cursor <cursoragent@cursor.com>
…, raw github source

Rename aligned-onboarding to meta-and-voc-onboarding (id, folder, staged
paths, all docs; the immutable pre-cleanup tag keeps its name). Version
policy is now a simple integer bumped once per package update, starting
at 1, with the CHANGELOG collapsed to that entry. The index entry moves
to categories: [] and a raw github source. Docs replace bare
`integrations status` with `integrations status --app <slug>` sweeps and
fix the `n run --url` typo to `secure-fetch run --url`. The validator
matches the runtime contract: opaque non-empty versions, github-only
sources, empty categories allowed, fleet approval checked only on
pull_request events.
@motionBuilderEric motionBuilderEric changed the title feat(aligned-onboarding): v2 Meta onboarding package - installable by name feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name Jul 27, 2026
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from 1d78d8d to e70505c Compare July 27, 2026 22:00
rachelgrant27 and others added 8 commits July 27, 2026 18:38
…edback heals context

- validation v1.10: durability routing for every piece of feedback (judgment rules -> ACB fields, standing prefs -> register/Field 10/deck record, current-state -> answer only, one-offs -> current render, revert on refresh); deck feedback routes to fields and the deck regenerates from context, never hand-edited; MVCE needs every question clean (corrections re-open only what they touch) plus spec-level deck approval; loop continues past MVCE with no scheduled check-ins
- validation gate guard v3: deck change requests are context corrections, always-on
- ACB v1.31: Field 10 named as the landing spot for structural deck feedback

Co-authored-by: Cursor <cursoragent@cursor.com>
…th indexing model

Verified against agent-builder origin/staging (motion.ts, cache/exporters.ts,
cache/storage.ts) before editing.

- Access check first: playbook Step 2 opens with one
  `motion cache status --workspace-id <workspaceId>` call; on error, record the
  blocker and stop — no retry loops against the data commands. Same status-first
  note in the command reference overview.
- Fix the naming-decoder export flow: `motion cache export-summaries` returns a
  ./workdir wrapper, not the JSONL corpus. Docs now read the Meta corpus path
  from `exportPaths.meta` (command output) or `.providers.meta.path` (wrapper
  file) and run `jq -r '.adNames[]?'` against that per-provider file. Old
  instructions ran jq against the wrapper and produced an empty name list.
  Every Step 2 command now carries an explicit `--workspace-id`.
- Narrow data-surface claims: export and search records carry ad metadata, copy,
  landing/media URLs, and summary sections only. Transcripts and glossary/AI
  tags live solely on the full record via `motion cache get-creative`; removed
  "all transcripts / glossary tags" claims and the glossary jq example on
  exports, and dropped the transcript-fragment claim from search.
- Consistent Knoweth<>Cacheth model everywhere: Knoweth indexes the summary
  artifacts Cacheth generates (identity, ad names, copy, summary text), never
  complete records. Replaces both the "surfaced through Knoweth" overclaim and
  the "NOT indexed by Knoweth" underclaim across the package.
- Frame Cacheth as a hydration layer behind the motion CLI, transparent to the
  agent.
- Correct storage claims: only the wrapper lands in ./workdir; per-provider
  export files live in Cacheth's own storage.

Deliberately unchanged: guards/meta-validation-gate.md and its byte-identical
copy in meta-validation-onboarding-package.md (guard blocks merge verbatim into
/agent/user.md; changing them is a guard-versioning decision).

Staging validation:
- Positive path (cache-enabled orgs): status check ran once before export; the
  agent resolved the real corpus from exportPaths.meta, ran jq against the
  per-provider JSONL (never the wrapper), and decoded naming systems from
  hundreds of real ad names. The old empty-list failure did not reproduce, and
  no output claimed transcripts or glossary tags from export/search.
- Negative path (org with the sandbox Motion cache disabled, exercised
  deliberately): the status-first gate behaved exactly as written — the agent
  ran `motion cache status` once, quoted the playbook rule ("record the
  blocker and stop this step — do not loop retries"), recorded the blocker in
  the account-context file, and never touched the data commands or drew a
  false "no ads" conclusion.
…ed by staging runs

Four fixes to the install-time sequence, each grounded in a staging test
observation:

- Step 1 names the sanctioned stored-secret probe: the secret store cannot be
  listed (runtime refuses Bash reads of /agent/.runtime/secrets; neither
  `secret` nor `secure-fetch` has a list command), so probe each platform's
  documented secret key and treat "secret not available" as not stored. Same
  note added to the voc-data-pull skill's availability-check paragraph.
- Step 4 names the Creative Attributes procedure path
  (meta/meta-creative-attributes-playbook.md, a brain document) so agents stop
  probing for a nonexistent creative-attributes skill directory.
- Step 5 now matches the account-context playbook it delegates to: the brain
  file is written in the playbook's saved-file format (prose reference
  document) and indexed in /agent/INDEX.md with the playbook's aliases at
  install time. The old step text demanded terse facts and deferred INDEX.md,
  contradicting the playbook; agents consistently sided with the playbook.
- Step 6 closes two report-leak gaps: decoder shape counts ("a 5-position
  decoder", "4 schemas detected") are explicitly decoder detail, and the
  status-only discipline extends to the progress narration around the report,
  not just the report body.
…VM path

The package manifest flattens the repo's meta/ folder into
/agent/brain/meta-and-voc-onboarding/, so the playbook lives at
meta-and-voc-onboarding/meta-creative-attributes-playbook.md on the VM. Step 4
now names that staged path and forbids improvising the Creative Attributes step
from live Motion pulls when the playbook cannot be read.
…ets mechanical

Staging runs followed the descriptive wording loosely: one agent concluded
'no stored secrets' from a refused directory read without running a single
key probe, and another appended the detected naming convention to the
readiness report's Creative Attributes bullet. Step 1 now requires a
secret-run probe per key-stored platform before the step is done and rules
out indirect checks explicitly. Step 6 now states the template bullets are
filled only at their angle-bracket slots, with the allowed states as the
only permitted extensions.
…ace and placeholder scope

Step 3 told installers to replace every literal <workspaceId> token without
saying which workspace is the target; a staging run anchored on a stale id
from removed guard blocks and stamped the guards for the wrong workspace,
and the 'every token' rule also collided with the knoweth-organize guard's
generic project:<workspaceId> lane syntax. The target is now defined as the
workspace this conversation's Motion commands resolve to, substitution is
scoped to the guard headers, and the lane syntax stays untouched alongside
the other placeholders.
…add-optional + sync

The package description (manifest and index entry, kept byte-identical) now names the
canonical install path: an agent runs `package intent add-optional meta-and-voc-onboarding`
followed by `package sync`. The README's intro paragraph and "Install and run order" step 1
said the install conversation stages files "with one `package install` call" - that is the
branch-testing command, not the indexed flow. Both now describe the intent + sync pair;
explicit `package install github:...` remains documented only as the branch/PR-testing
variant.
@motionBuilderEric
motionBuilderEric force-pushed the eric/aligned-onboarding-v2-meta-package branch from 9a7e2e0 to fe9ab13 Compare July 28, 2026 13:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants