feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name - #172
Open
motionBuilderEric wants to merge 38 commits into
Open
feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name#172motionBuilderEric wants to merge 38 commits into
motionBuilderEric wants to merge 38 commits into
Conversation
…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
marked this pull request as ready for review
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.
…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>
…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>
… 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>
… recipe (verbatim installed.json resources)
…tim manifest entries
motionBuilderEric
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 25, 2026 19:47
335dfe4 to
19a28d6
Compare
…ge describes desired state only
…se gate Co-authored-by: Cursor <cursoragent@cursor.com>
motionBuilderEric
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 26, 2026 00:36
77adbdb to
fce81c3
Compare
…rchaeology Co-authored-by: Cursor <cursoragent@cursor.com>
…al install message
motionBuilderEric
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 26, 2026 01:23
dc7b529 to
8f58f3f
Compare
…ehavior in post-install
motionBuilderEric
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 26, 2026 02:44
0bca653 to
9c5da87
Compare
…n connection status is unreadable
… 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
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 27, 2026 22:00
1d78d8d to
e70505c
Compare
…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
force-pushed
the
eric/aligned-onboarding-v2-meta-package
branch
from
July 28, 2026 13:08
9a7e2e0 to
fe9ab13
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 removedSummary
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/, andonboarding-walkthrough/— with a single combined README and a real schema-v1package.jsonmanifest (package version1; versions are simple integers bumped once per package update) mapping every file. The package is registered in the repo rootpackage-index.json, so it installs by name: a person says "install meta-and-voc-onboarding" and Runneth runspackage 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.mdand 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; anactivationpackage 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-copiedinstall-config.jsonflow. 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 thecorpus-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 themotion cacheCLI (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 ofaccount-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.mdwith 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.mdwritten 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 toadName+ 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'surl— the insightsmediaUrlis often null on ASC — and names always decoded throughnaming-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 fivemotion cachecommands.motion cache statusruns first as a one-shot access check; exports are a two-hop flow (the command's workdir wrapper file carries.providers.<provider>.pathpointing at the JSONL corpus in Cacheth's own storage); transcripts and AI glossary tags exist only on the full record viaget-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.mdplusreferences/platform-recipes.mdand 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.external_id/created_atgenuinely don't exist. Docs are single-sourced: per-platform evidence levels and caveats live only in each recipe's header (Junip live-verified, Yotposince_datecorrected, the eight new platforms doc-grounded), and the coverage contract (12-month window, page-cap resume, coverage reporting) is owned solely bySKILL.md's hard boundaries.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 thegloballane, 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: onlyglobal,user:<userId>, andproject:<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/):account-context.md(guard-enforced), metrics from live CLI pulls, name filters through the confirmed decode. On-demand only.Onboarding Walkthrough skill (
onboarding-walkthrough/):corpus-search removed:
corpus-search/deleted entirely. RootREADME.mdandMIGRATION.mdupdated so the compatibility set is now justbuilding-integrations; manifest-name references corrected topackage.json. The removed payload stays recoverable fromarchive/full-libraryand the pre-cleanup tag.Install mechanics (package manager):
install-config.jsonis gone;meta-and-voc-onboarding/package.json(schema v1, version1,categories: [],installPolicy: manual,updatePolicy: auto,uninstallPolicy: allowed) maps every doc, the three skills, the staged guard files, and the activation instruction. Registered inpackage-index.json(sourcegithubatmain). One package-manager call stages everything deterministically;package install "github:...#<branch>"remains only as the branch-testing path./agent/user.mdguard 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.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):post-install.mdand execute its install-time sequence in the same conversation; anactivationpackage 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-adsvia 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).secret run --env KEY=<SECRET_KEY> -- trueor a boundedsecure-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 (Knowethproject:<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.mdat 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.Notes for reviewers
resolveKnowethReadLanesrequests exactly[user, project:<workspaceId>, global]today). Needs an owner; fits PDEC-9225.naming-decoder.json— never an assumed offset; if the decoder carries neither, it asks for the calendar directly.scripts/validate-runneth-package-index.mjsuntouched — the validator update for the current contract (integer versions, empty categories,githubsource) 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 therunneth-fleet-change-approvedlabel after core engineering approval (not self-applied)./agent/user.mdis blocked from Bash (hence the single-Write guard merge)./agent/.runneth/packages/. Hand-written package state has produced invalidinstalled.jsonentries in the field that blocked every later turn on the VM.Staging validation
motion cache statuscall, blocker recorded, step stopped with no retry loops — exactly as the playbook prescribes.package uninstallleaves merged guard blocks and brain files on disk, and transient harness errors that retried cleanly.Test plan
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 conversationvoc-sync-<platform>routine per reachable platform, kicks backfills in the background, and never pulls VoC data in-conversation_tag-vocabulary.md) behind its already-merged guard blocks