@event4u/agent-config 2.24.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.agent-src/commands/create-pr/description-only.md +39 -11
  2. package/.agent-src/commands/create-pr.md +59 -5
  3. package/.agent-src/commands/video/from-script.md +5 -5
  4. package/.agent-src/commands/video/storyboard.md +1 -1
  5. package/.agent-src/contexts/execution/roadmap-process-loop.md +69 -14
  6. package/.agent-src/personas/README.md +3 -2
  7. package/.agent-src/personas/ai-video-technical-director.md +2 -2
  8. package/.agent-src/personas/hollywood-director.md +3 -3
  9. package/.agent-src/profiles/content_creator.yml +5 -0
  10. package/.agent-src/rules/media-governance-routing.md +82 -0
  11. package/.agent-src/rules/persona-governance.md +90 -0
  12. package/.agent-src/rules/post-push-rewrite-discipline.md +70 -0
  13. package/.agent-src/rules/provider-lifecycle-discipline.md +75 -0
  14. package/.agent-src/rules/roadmap-ci-steps-policy.md +145 -0
  15. package/.agent-src/rules/roadmap-progress-sync.md +11 -5
  16. package/.agent-src/skills/character-consistency/SKILL.md +12 -1
  17. package/.agent-src/skills/git-workflow/SKILL.md +133 -0
  18. package/.agent-src/skills/motion-choreographer/SKILL.md +12 -0
  19. package/.agent-src/skills/pixar-storyteller/SKILL.md +19 -6
  20. package/.agent-src/skills/roadmap-writing/SKILL.md +10 -0
  21. package/.agent-src/skills/scene-expander/SKILL.md +22 -7
  22. package/.agent-src/skills/video-director/SKILL.md +13 -0
  23. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  24. package/.agent-src/templates/roadmaps.md +16 -0
  25. package/.claude-plugin/marketplace.json +1 -1
  26. package/CHANGELOG.md +43 -0
  27. package/README.md +5 -3
  28. package/config/agent-settings.template.yml +26 -0
  29. package/docs/architecture.md +1 -1
  30. package/docs/catalog.md +5 -2
  31. package/docs/contracts/file-ownership-matrix.json +81 -13
  32. package/docs/contracts/provider-lifecycle.md +122 -0
  33. package/docs/decisions/ADR-011-domain-pack-readiness.md +213 -0
  34. package/docs/decisions/INDEX.md +1 -0
  35. package/docs/getting-started-by-role.md +10 -0
  36. package/docs/getting-started.md +1 -1
  37. package/docs/personas.md +73 -26
  38. package/docs/profiles.md +9 -4
  39. package/package.json +1 -1
  40. package/scripts/_tmp_scan_framework_leakage.py +119 -0
  41. package/scripts/ai-video/adapters/gemini-veo.sh +5 -0
  42. package/scripts/ai-video/adapters/higgsfield.sh +6 -0
  43. package/scripts/ai-video/adapters/kling.sh +5 -0
  44. package/scripts/ai-video/adapters/openai-images.sh +5 -0
  45. package/scripts/ai-video/adapters/sora.sh +6 -0
  46. package/scripts/check_portability.py +6 -0
  47. package/scripts/lint_media_policy_linkage.py +140 -0
  48. package/scripts/lint_persona_governance.py +164 -0
  49. package/scripts/lint_roadmap_ci_steps.py +182 -0
  50. package/scripts/smoke/schema.sh +1 -1
  51. package/.agent-src/personas/pixar-storyboard-artist.md +0 -98
@@ -0,0 +1,75 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "When editing an AI video/image/audio adapter — declare lifecycle tier (experimental | stable | deprecated | community); never default to non-stable"
5
+ source: package
6
+ triggers:
7
+ - keyword: "/video:"
8
+ - keyword: "/image:"
9
+ - keyword: "/audio:"
10
+ - keyword: "ai-video"
11
+ - keyword: "ai-image"
12
+ - keyword: "ai-audio"
13
+ - keyword: "adapter"
14
+ - keyword: "provider"
15
+ - path_prefix: "scripts/ai-video/adapters/"
16
+ - path_prefix: "agents/.ai-video.xml"
17
+ - phrase: "lifecycle"
18
+ - phrase: "default provider"
19
+ routes_to:
20
+ - "contract:provider-lifecycle"
21
+ applies_to_user_types:
22
+ - "creator"
23
+ - "developer"
24
+ - "maintainer"
25
+ ---
26
+
27
+ # Provider Lifecycle Discipline
28
+
29
+ ## Iron Law
30
+
31
+ ```
32
+ NEVER DEFAULT TO A NON-STABLE PROVIDER SILENTLY.
33
+ SURFACE THE LIFECYCLE TIER. ASK BEFORE RUNNING.
34
+ ```
35
+
36
+ This rule routes the agent to [`docs/contracts/provider-lifecycle.md`](../docs/contracts/provider-lifecycle.md) whenever a `/video:* / /image:* / /audio:*` surface fires, an adapter under `scripts/ai-video/adapters/` is read or edited, or `agents/.ai-video.xml.example` (or the operator's `agents/.ai-video.xml`) is in play. The contract defines four tiers — `experimental | stable | deprecated | community` — and the agent's obligations per tier.
37
+
38
+ ## What this rule enforces
39
+
40
+ 1. **Read the tier before picking.** When the agent resolves a provider (from `--provider <id>`, from `<default-video-provider>` / `<default-image-provider>`, or from a skill's default), it MUST read both:
41
+ - the `<lifecycle>` element under `<provider id="…">` in `agents/.ai-video.xml.example` (or the operator's `.ai-video.xml`), and
42
+ - the `Lifecycle:` header comment in `scripts/ai-video/adapters/<id>.sh`.
43
+ Mismatch between the two is a contract violation and MUST be surfaced before running.
44
+
45
+ 2. **Refuse-and-surface on non-stable.** If the resolved default is `experimental`, `deprecated`, or `community`, the agent surfaces the tier and the path to the contract, then emits **one** clarifying question (per [`ask-when-uncertain`](ask-when-uncertain.md)): either confirm the non-stable run, or pick a `stable` provider. No silent default. No "I'll just try it".
46
+
47
+ 3. **Refuse `deprecated` without naming the successor.** A `deprecated` adapter's header comment records the successor; the agent surfaces "X is deprecated; successor: Y" before any run, even with confirmation.
48
+
49
+ 4. **Record the tier in the run summary.** The summary line emitted after every `/video:* / /image:* / /audio:*` run names the chosen provider AND its tier. This is the audit-log entry the agent-in-the-loop enforcement model rests on.
50
+
51
+ 5. **Promotion is the maintainer's call.** The agent never auto-promotes `experimental → stable`. It MAY draft a promotion checklist (see [`docs/contracts/provider-lifecycle.md § 2`](../docs/contracts/provider-lifecycle.md#-2--promotion-path)) for maintainer review, but the tier-flip commit is human-authored.
52
+
53
+ ## Failure modes — what counts as a violation
54
+
55
+ - Running `/video:scene` against the `<default-video-provider>` without reading the lifecycle tag first → violation.
56
+ - Picking a `community` provider because it was named in the prompt, without surfacing the tier → violation.
57
+ - Editing an adapter and leaving its header `Lifecycle:` comment out of sync with `agents/.ai-video.xml.example` → violation (CI does not catch this; the agent must).
58
+ - Auto-promoting an adapter from `experimental` to `stable` because "dry-run worked" → violation. Promotion requires a maintainer-captured real-API smoke trace under `agents/ai-video/smoke-traces/`.
59
+
60
+ ## Day-one state
61
+
62
+ All five shipped adapters (`openai-images`, `gemini-veo`, `kling`, `higgsfield`, `sora`) ship as `experimental`. This means **every** default `/video:* / /image:*` run today triggers the refuse-and-surface path. That is intentional — it is the conservative-by-construction posture the contract argues for. As maintainers capture smoke traces and flip individual adapters to `stable`, the friction reduces per-adapter.
63
+
64
+ ## Why agent-in-the-loop, not Python gate
65
+
66
+ A Python pre-run gate enumerating tier-by-command rules would either be too coarse (`experimental → block`, breaking day-to-day dev iteration) or too detailed (per-command tier matrix, drifting from reality on every new provider). The agent reading the tag at run time, surfacing the tier, and asking is the correct enforcement surface: the model that picked the provider is the model that surfaces the obligation, and the human is the policy decision point.
67
+
68
+ The CI guarantee is structural reachability — the linter would fail if a provider was declared in `agents/.ai-video.xml.example` without a lifecycle tag (extension planned). It does not enforce the runtime obligation; the agent does.
69
+
70
+ ## See also
71
+
72
+ - [`docs/contracts/provider-lifecycle.md`](../docs/contracts/provider-lifecycle.md) — the full tier definitions, promotion / demotion criteria, and day-one assignment matrix.
73
+ - [`scripts/ai-video/lib/adapter-contract.md`](../../scripts/ai-video/lib/adapter-contract.md) — the four-method shell surface every adapter implements; the tier tag is read alongside this contract.
74
+ - [`media-governance-routing`](media-governance-routing.md) — sibling tier-2a rule that surfaces the prompt-side policy layer; this rule covers the provider-side discipline.
75
+ - [`ask-when-uncertain`](ask-when-uncertain.md) — the one-question-per-turn discipline the refuse-and-surface path uses.
@@ -0,0 +1,145 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "When authoring or executing roadmaps — forbid task ci / make test / npm run check steps when quality.local_auto_run is false; skip inline at execution"
5
+ source: package
6
+ triggers:
7
+ - path_prefix: "agents/roadmaps/"
8
+ - path_prefix: "app/Modules/"
9
+ - keyword: "task ci"
10
+ - keyword: "make test"
11
+ - keyword: "npm run check"
12
+ - keyword: "pnpm run check"
13
+ - keyword: "yarn check"
14
+ - keyword: "composer test"
15
+ - phrase: "run the quality pipeline"
16
+ - phrase: "run task ci"
17
+ - phrase: "run the full ci"
18
+ applies_to_user_types:
19
+ - "maintainer"
20
+ - "developer"
21
+ validator_ignore:
22
+ - type: "substring"
23
+ pattern: "agents/roadmaps/"
24
+ reason: "Rule's subject is roadmap files under agents/roadmaps/; every body link points there by design."
25
+ - type: "substring"
26
+ pattern: ".agent-settings.yml"
27
+ reason: "Rule reads quality.local_auto_run from .agent-settings.yml; naming the file is the contract."
28
+ ---
29
+
30
+ # Roadmap CI-Steps Policy
31
+
32
+ ## Iron Law
33
+
34
+ ```
35
+ WHEN quality.local_auto_run IS FALSE,
36
+ ROADMAPS MUST NOT SCHEDULE FULL-PIPELINE CI STEPS,
37
+ AND EXECUTION MUST SKIP THEM INLINE WITH [-] AND A REASON.
38
+ ```
39
+
40
+ When `quality.local_auto_run: false` in `.agent-settings.yml`, every
41
+ full-pipeline gate run during roadmap work is wasted wall-clock and
42
+ tokens — remote CI on the PR is the authoritative gate. Roadmaps
43
+ must neither schedule nor execute them locally. New CI gates and
44
+ smoke/test files added by the roadmap itself are exempt — they must
45
+ run once locally to count as verified evidence per
46
+ [`verify-before-complete`](verify-before-complete.md).
47
+
48
+ ## Forbidden step patterns (authoring + execution)
49
+
50
+ A step is **CI-shaped** when its text matches any pattern below.
51
+ Case-insensitive. Line-bounded — literal must appear inside the
52
+ step's `- [ ]` line or its immediate inline `<!-- … -->` / `(…)` note.
53
+
54
+ | Pattern | Example |
55
+ |---|---|
56
+ | `task ci` | `Run task ci before the boundary` |
57
+ | `task ci-strict` | `task ci-strict release gate` |
58
+ | `task ci-fast` | `task ci-fast smoke` |
59
+ | `make test` | `Run make test on phase boundary` |
60
+ | `make ci` | `make ci pre-merge` |
61
+ | `npm run check` / `pnpm run check` / `yarn check` | `npm run check before commit` |
62
+ | `composer test` | `composer test on every phase` |
63
+ | `vendor/bin/phpunit` (whole-suite, no path arg) | `vendor/bin/phpunit` |
64
+ | `php artisan test` (no `--filter`) | `php artisan test` |
65
+
66
+ Targeted commands (`vendor/bin/phpstan analyse app/Modules/X`,
67
+ `php artisan test --filter=…`, `npm run lint -- --fix path/`) are
68
+ **not** CI-shaped — narrow verifications, allowed regardless of the
69
+ setting.
70
+
71
+ ## Carve-outs — when CI-shaped steps are still allowed
72
+
73
+ 1. **New CI gate / smoke test / test file landed by this roadmap.**
74
+ Once-locally execution is mandatory under
75
+ [`verify-before-complete`](verify-before-complete.md) carve-out
76
+ (see `templates/agent-settings.md` § `quality.local_auto_run`).
77
+ Mark the step with `<!-- carve-out: new-gate-verification -->`
78
+ on the same line; linter and execution loop honour it and let the
79
+ step run.
80
+ 2. **`quality.local_auto_run: true`.** Opt-in restores pre-policy
81
+ behaviour — linter no-ops, execution loop runs CI steps unmodified.
82
+ 3. **Acceptance-criteria block at end of roadmap.** Final-gate prose
83
+ like "All quality gates pass (`task ci`)" inside an
84
+ `## Acceptance criteria` section is documentation, not an
85
+ executable step (no `- [ ]` checkbox in front). Linter ignores;
86
+ execution loop never reaches it as a step.
87
+
88
+ ## Authoring — linter blocks at write-time
89
+
90
+ `task lint-roadmap-ci-steps` (wired into `task ci-fast` /
91
+ `lint-roadmap-complexity` cadence) scans `agents/roadmaps/*.md` and
92
+ `app/Modules/*/agents/roadmaps/*.md`. Exit code:
93
+
94
+ - `0` — no CI-shaped steps, or setting is `true`, or every match is
95
+ carve-out-marked.
96
+ - `1` — at least one CI-shaped step in an active (non-archived,
97
+ non-skipped) roadmap with `quality.local_auto_run: false` and no
98
+ carve-out marker. Linter prints file, line, matched literal, and
99
+ suggested rewording.
100
+
101
+ Archive (`agents/roadmaps/archive/`) and skipped
102
+ (`agents/roadmaps/skipped/`) are out of scope — they record history,
103
+ not future work.
104
+
105
+ ## Execution — process-loop skips inline
106
+
107
+ Wrappers `/roadmap:process-step|phase|full` honour the policy at the
108
+ top of [`roadmap-process-loop § 5`](../contexts/execution/roadmap-process-loop.md#5-step-loop):
109
+
110
+ 1. Before running a step, match its text against the patterns above.
111
+ 2. CI-shaped **and** `quality.local_auto_run: false` **and** no
112
+ carve-out marker → flip checkbox to `[-]` (cancelled), append a
113
+ one-line reason as inline note, regenerate the dashboard, continue
114
+ to next step. **Never** run the gate.
115
+ 3. CI-shaped **and** `quality.local_auto_run: true` → run normally.
116
+ 4. Carve-out-marked → run regardless of the setting.
117
+
118
+ The `[-]` reason format is fixed:
119
+ `<!-- skipped: quality.local_auto_run=false → remote CI is the gate -->`.
120
+ Per [`roadmap-progress-sync`](roadmap-progress-sync.md) the flip and
121
+ dashboard regen happen in the **same reply** that decides to skip;
122
+ saving skips for the archive commit is a rule violation.
123
+
124
+ ## Failure modes
125
+
126
+ - Authoring `- [ ] Run task ci` while `local_auto_run: false` — linter
127
+ fails the PR.
128
+ - Executing a CI-shaped step without inline-skip flip — Iron Law
129
+ violation; loop never reaches the gate.
130
+ - Carve-out marker on an *existing* pipeline run — abuse; the marker
131
+ is reserved for **new** gates introduced by the same roadmap.
132
+ - Hiding the literal inside a fenced bash block to dodge the linter —
133
+ linter matches inside fenced blocks too (see
134
+ `scripts/lint_roadmap_ci_steps.py`).
135
+
136
+ ## See also
137
+
138
+ - [`verify-before-complete`](verify-before-complete.md) — Iron Law
139
+ this rule narrows; carve-out cites it.
140
+ - [`roadmap-progress-sync`](roadmap-progress-sync.md) — inline flip +
141
+ dashboard regen contract.
142
+ - `templates/agent-settings.md` § `quality.local_auto_run` — source
143
+ of the toggle and its carve-out wording.
144
+ - [`contexts/execution/roadmap-process-loop`](../contexts/execution/roadmap-process-loop.md)
145
+ — § 5 owns the inline-skip mechanics.
@@ -25,16 +25,17 @@ Roadmap touch = create / rename / delete / move file, add/rename/remove a phase,
25
25
  ```
26
26
  EVERY DONE STEP FLIPS [ ] → [x] IN THE SAME REPLY THAT LANDS THE WORK.
27
27
  NO "I UPDATE THE ROADMAP AT THE END OF THE PHASE."
28
- NO "FOUR STEPS DONE, ONE COMMIT, ONE REGEN."
29
28
  A REPLY THAT LANDS A VERIFIED STEP WITHOUT FLIPPING ITS CHECKBOX
30
29
  IS A RULE VIOLATION, NOT AN OVERSIGHT.
31
30
  ```
32
31
 
33
- `/roadmap:process-step`, `/roadmap:process-phase`, `/roadmap:process-full`, and any other multi-step autonomous run flip the box for step N **before** moving on to step N+1. The dashboard is a real-time monitor, not a post-hoc summary. Batched flips at the archive commit defeat the dashboard's purpose.
32
+ `/roadmap:process-step`, `/roadmap:process-phase`, `/roadmap:process-full`, and any other multi-step autonomous run flip the box for step N **before** moving on to step N+1. The checkbox itself is the real-time monitor the markdown file is the source of truth, the dashboard is a derived view.
34
33
 
35
34
  **Step counts as done** when its code/doc change is written and saved AND the verification cited in the step has passed (fresh output in this reply or an earlier one).
36
35
 
37
- **In-progress marker.** When a step takes more than one reply, mark it `[~]` the moment work starts and regen — the user sees one row move `[ ] → [~] → [x]` instead of silent rows. `[~]` stays open for `count_open` but advances the phase percentage.
36
+ **In-progress marker.** When a step takes more than one reply, mark it `[~]` the moment work starts — the user sees one row move `[ ] → [~] → [x]` instead of silent rows. `[~]` stays open for `count_open` but advances the phase percentage.
37
+
38
+ **Dashboard regen cadence — opt-in batching.** The checkbox flip is non-batchable. The **subprocess regen** (`./agent-config roadmap:progress`) is batchable per `roadmap.dashboard_regen_cadence` in `.agent-settings.yml` (`per_step` default · `every_5_steps` · `phase_boundary`). Run end, phase boundary, and any file-shape touch (rename / phase add / archive — Iron Law 1) always force an immediate regen regardless of cadence.
38
39
 
39
40
  ## Pre-send self-check — MANDATORY
40
41
 
@@ -42,10 +43,15 @@ Before sending any reply that landed roadmap work:
42
43
 
43
44
  1. Did this reply land a step (code/doc saved + verification passed)?
44
45
  2. Is its checkbox flipped to `[x]` / `[~]` / `[-]` in `agents/roadmaps/<file>.md`? If no → flip, then continue.
45
- 3. Did `./agent-config roadmap:progress` run after the flip? If no → run, then continue.
46
+ 3. Is regen due now per `roadmap.dashboard_regen_cadence`?
47
+ - `per_step` → yes, always.
48
+ - `every_5_steps` → yes when this is the 5th, 10th, … closed step in the run, or the last step of the reply.
49
+ - `phase_boundary` → only when this reply closes the phase or run.
50
+ - Any file-shape touch (rename / phase add / archive) → yes, regardless of cadence.
51
+ If yes and not run yet → run `./agent-config roadmap:progress`, then continue.
46
52
  4. Did `count_open` reach 0? If yes → `git mv` to `archive/` and regen again — same reply.
47
53
 
48
- Any "no" at step 2 or 3 → reply is incomplete. Do not send.
54
+ Any "no" at step 2 → reply is incomplete. Do not send. A skipped step 3 regen is fine when cadence permits — checkbox truth lives in the markdown file.
49
55
 
50
56
  Long-form mechanics (failure-mode catalog, Copilot fallback, `[~]` vs `[ ]` semantics, hook + CI defence-in-depth) live in `guideline:agent-infra/roadmap-progress-mechanics`.
51
57
  Trigger-set above activates this routing under the `balanced` and `full` profiles.
@@ -2,7 +2,6 @@
2
2
  name: character-consistency
3
3
  description: "Use when a character must stay visually identical across AI video scenes — locks identity tokens (silhouette, palette, wardrobe, prop) in JSON. Triggers 'character lock', 'same character'."
4
4
  personas:
5
- - pixar-storyboard-artist
6
5
  - hollywood-director
7
6
  source: package
8
7
  domain: product
@@ -118,3 +117,15 @@ the lock.
118
117
  - Do NOT skip the reference frame after the first render — visual
119
118
  regression has nothing to compare against.
120
119
  - Do NOT lock a character that appears in only one scene.
120
+
121
+ ## Policies
122
+
123
+ When a character lock would identify or render a real person, consult before emitting the JSON:
124
+
125
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — real-person identity tokens require a cited likeness release.
126
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — recognised public figures carry the harder gate (publicity rights + transformative-intent).
127
+ - [`agents/policies/media/voice-cloning.md`](../../../agents/policies/media/voice-cloning.md) — when `voice_note` references a real person's voice.
128
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — outputs carrying a real-person lock require the non-removable AI-generation disclosure downstream.
129
+
130
+ Refuse-and-surface the file path; do not silently sanitise the prompt.
131
+
@@ -77,6 +77,139 @@ The project uses `.github/pull_request_template.md`:
77
77
  - `main` is default/production branch.
78
78
  - Merge strategy: merge commits (not squash).
79
79
 
80
+ ## Procedure: Safe squash-after-push
81
+
82
+ Use ONLY when the user explicitly authorized a squash on a branch that
83
+ is already on origin. The whole sequence runs in **one turn** — never
84
+ end the session between rewrite and push.
85
+
86
+ Trigger context: `post-push-rewrite-discipline` rule routed here.
87
+
88
+ ### 1. Snapshot before touching anything
89
+
90
+ ```bash
91
+ BRANCH=$(git branch --show-current)
92
+ DATE=$(date +%F)
93
+ git fetch origin
94
+ git tag "safe-squash-pre/${BRANCH}/${DATE}" HEAD
95
+ git tag "safe-squash-origin/${BRANCH}/${DATE}" "@{u}"
96
+ ```
97
+
98
+ Two tags = two recoveries (local tip + origin tip). Do not skip the
99
+ tags — `git reflog` is TTL-bounded and unreliable across sessions.
100
+
101
+ ### 2. Verify aligned starting state
102
+
103
+ ```bash
104
+ git rev-list --left-right --count HEAD...@{u}
105
+ ```
106
+
107
+ - `0 0` → aligned, proceed.
108
+ - `N 0` (local ahead) → unpushed work, proceed.
109
+ - `0 N` (origin ahead) → `git pull --ff-only` first, then re-check.
110
+ - `M N` (both non-zero) → **divergent**. Abandon the squash and run
111
+ § Divergent-State Recovery below.
112
+
113
+ ### 3. Perform the squash
114
+
115
+ Default — soft-reset path (single token-cheap rewrite):
116
+
117
+ ```bash
118
+ git reset --soft "$(git merge-base HEAD <base>)"
119
+ git commit -m "<conventional commit message>"
120
+ ```
121
+
122
+ Interactive rebase only when the user wants per-commit control — it
123
+ replays derived files (`.compression-hashes.json`, router projections)
124
+ per commit and conflicts on every replay.
125
+
126
+ ### 4. Re-push in the SAME turn
127
+
128
+ ```bash
129
+ FETCHED_SHA=$(git rev-parse "@{u}")
130
+ git push --force-with-lease="${BRANCH}:${FETCHED_SHA}" origin "${BRANCH}"
131
+ git fetch origin
132
+ [ "$(git rev-parse HEAD)" = "$(git rev-parse @{u})" ] \
133
+ && echo "OK: origin matches HEAD" \
134
+ || echo "MISMATCH — do not end session"
135
+ ```
136
+
137
+ If the push fails (pre-push hook, network, token budget):
138
+ - Fix the underlying cause **now**.
139
+ - Re-push immediately.
140
+ - Do not commit new work on top of the squashed-but-unpushed tip.
141
+ - Do not end the session until `HEAD == @{u}`.
142
+
143
+ ### 5. Hand off only with verified parity
144
+
145
+ Report exactly:
146
+ - pre-squash tip SHA (from step 1)
147
+ - pre-squash tag name (for recovery)
148
+ - post-squash tip SHA == origin SHA (verified in step 4)
149
+ - PR number, if any, and confirm it picked up the new tip
150
+
151
+ ## Procedure: Divergent-State Recovery
152
+
153
+ Fires when `git rev-list --left-right --count HEAD...@{u}` shows
154
+ **both** sides non-zero on the current branch.
155
+
156
+ ### 1. Stop. Do not pull.
157
+
158
+ A blind `git pull --rebase` here replays remote commits on top of a
159
+ local history that may already represent the same work in a different
160
+ shape — guaranteed conflict storm in derived files, possible
161
+ double-application of the same change. This is the documented failure
162
+ mode behind `post-push-rewrite-discipline`.
163
+
164
+ ### 2. Tag both sides immediately
165
+
166
+ ```bash
167
+ TS=$(date +%FT%H%M)
168
+ git tag "diverged-local/${TS}" HEAD
169
+ git tag "diverged-origin/${TS}" "@{u}"
170
+ ```
171
+
172
+ ### 3. Diagnose: which side is the correct future?
173
+
174
+ ```bash
175
+ git log --oneline @{u}..HEAD # local-only commits
176
+ git log --oneline HEAD..@{u} # origin-only commits
177
+ git diff @{u}..HEAD --stat # shape of local-ahead work
178
+ ```
179
+
180
+ Decision matrix:
181
+
182
+ | Pattern | Future | Action |
183
+ |---|---|---|
184
+ | Local has the same logical work as origin, just reshaped (squash/rebase) | **Local** | After PR-review check (step 4), `git push --force-with-lease=<branch>:<origin-sha>` |
185
+ | Origin has commits local does not reflect (another contributor pushed) | **Origin** | Tag any local-ahead work for cherry-pick, then `git reset --hard @{u}` |
186
+ | Both sides have genuine independent work | **ask user** | Never decide silently — surface the two commit lists and let the user pick |
187
+
188
+ ### 4. PR review-comment check (mandatory before any force-push)
189
+
190
+ If a PR is open on this branch:
191
+ ```bash
192
+ gh pr view --json reviews,comments
193
+ # or via GitHub API: /repos/<owner>/<repo>/pulls/<num>/{reviews,comments}
194
+ ```
195
+
196
+ If review comments are anchored to commits that the force-push will
197
+ erase → STOP, ask the user how to preserve them. A force-push that
198
+ destroys live review feedback is unrecoverable from the agent side.
199
+
200
+ ### 5. Recover or proceed
201
+
202
+ Use the tags from step 2 to restore either side if step 4 surfaces a
203
+ problem. After resolution, verify `HEAD == @{u}` and report both
204
+ SHAs plus the tags created.
205
+
206
+ ## Hard prohibitions on a pushed branch
207
+
208
+ - No `git pull --rebase` after detecting divergent state.
209
+ - No `git push --force` without `--force-with-lease=<branch>:<sha>`.
210
+ - No squash-then-end-session — the push must complete in the same turn.
211
+ - No reflog-only recovery — always tag the state explicitly first.
212
+
80
213
  ## Output format
81
214
 
82
215
  1. Commits following conventional commit format
@@ -147,3 +147,15 @@ stdin shape. The orchestrator pipes this into the video adapter's
147
147
  - Do NOT paraphrase identity tokens from `character.json`.
148
148
  - Do NOT call any network API — this skill is provider-tuning
149
149
  prose only.
150
+
151
+ ## Policies
152
+
153
+ Motion prompts inherit upstream blueprint constraints. Before emitting provider-tuned prose:
154
+
155
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed clip → non-removable AI-generation disclosure; refuse adapter flags that suppress it.
156
+ - [`agents/policies/media/transparency.md`](../../../agents/policies/media/transparency.md) — provider provenance (C2PA / SynthID) preserved; refuse re-encode flags that strip provenance.
157
+ - [`agents/policies/media/voice-cloning.md`](../../../agents/policies/media/voice-cloning.md) — motion prompt requests `audio: native` in named voice.
158
+ - [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — copies recognised brand's chyron / mascot / signature transition.
159
+
160
+ Refuse-and-surface; motion prompt cannot launder upstream policy gap.
161
+
@@ -1,18 +1,19 @@
1
1
  ---
2
2
  name: pixar-storyteller
3
3
  description: "Use when turning an idea into a Pixar-style animation prompt — character sheet, scene, image, video — anchored in emotional beat, want, obstacle. Triggers 'Pixar prompt', 'animated scene'."
4
- personas:
5
- - pixar-storyboard-artist
6
4
  source: package
7
5
  domain: product
8
6
  ---
9
7
 
10
8
  # pixar-storyteller
11
9
 
12
- > Turn an animation beat into the **four-block storyboard** the
13
- > `pixar-storyboard-artist` persona ships: CHARACTER SHEET · SCENE
14
- > PROMPT · IMAGE PROMPT · VIDEO PROMPT. Output is provider-agnostic;
15
- > provider tuning is [`motion-choreographer`](../motion-choreographer/SKILL.md).
10
+ > Turn an animation beat into the **four-block storyboard**:
11
+ > CHARACTER SHEET · SCENE PROMPT · IMAGE PROMPT · VIDEO PROMPT.
12
+ > Output is provider-agnostic; provider tuning is
13
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md).
14
+ >
15
+ > The acting / storyboard lens is enforced inline by the procedure
16
+ > and self-review below.
16
17
 
17
18
  ## When to use
18
19
 
@@ -105,3 +106,15 @@ Any "no" → revise that block.
105
106
  - Do NOT emit provider-specific tokens — that is `motion-choreographer`.
106
107
  - Do NOT cite "Pixar-style" without a specific film + year.
107
108
  - Do NOT compound emotional beats ("sad but hopeful and tired").
109
+
110
+ ## Policies
111
+
112
+ The Pixar-storyteller skill anchors prompts to named films and studios by design — the policy surface is the largest in the video cluster:
113
+
114
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — naming a film + year as the *primary* anchor crosses the "in the style of [STUDIO]" trigger; surface and refuse without a transformative-intent rationale.
115
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when a beat references a named animator's signature character (real-person extension of style).
116
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the storyteller's character is a recognised public figure rendered in Pixar shape.
117
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every Pixar-style output ships with the AI-generation disclosure; parody / commentary cases are flagged for human review.
118
+
119
+ Refuse-and-surface when style ⇒ primary signature, not one influence among several.
120
+
@@ -137,6 +137,16 @@ to every roadmap you author.
137
137
  user (`commit-policy` Iron Law). A roadmap is "implementation-complete"
138
138
  once its checkboxes are ticked and verification has been run — merge
139
139
  timing is tracked outside the roadmap.
140
+ * Schedule full-pipeline CI literals (`task ci`, `task ci-fast`,
141
+ `task ci-strict`, `make ci`, `make test`, `npm/pnpm run check`,
142
+ `yarn check`, `composer test`, whole-suite `vendor/bin/phpunit`,
143
+ whole-suite `php artisan test`) as checkbox steps when
144
+ `quality.local_auto_run: false` — blocked by
145
+ `task lint-roadmap-ci-steps` per
146
+ [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md).
147
+ Reword as narrow verifications, or mark with
148
+ `<!-- carve-out: new-gate-verification -->` when it verifies a NEW
149
+ gate this roadmap introduces.
140
150
  * Use ALL-CAPS Iron-Law fenced blocks — those belong in
141
151
  [`kernel-membership`](../../../docs/contracts/kernel-membership.md)-listed
142
152
  rules, not roadmaps.
@@ -3,7 +3,6 @@ name: scene-expander
3
3
  description: "Use when expanding a one-line idea into the 12-block Cinematic Scene Blueprint — provider-agnostic, includes optional dialogue + ambient. Triggers 'expand this scene', 'blueprint for X'."
4
4
  personas:
5
5
  - hollywood-director
6
- - pixar-storyboard-artist
7
6
  source: package
8
7
  domain: product
9
8
  ---
@@ -13,9 +12,10 @@ domain: product
13
12
  > Expand a one-line idea or script line into the **Cinematic Scene
14
13
  > Blueprint** — 12 labeled blocks consumed by
15
14
  > [`parse-blueprint.sh`](./scene-blueprint.schema.yaml). Picks
16
- > `hollywood-director` for live-action and `pixar-storyboard-artist`
17
- > for animated beats. Output is provider-agnostic — provider tuning
18
- > is [`motion-choreographer`](../motion-choreographer/SKILL.md).
15
+ > `hollywood-director` for live-action; hands off animated beats to
16
+ > [`pixar-storyteller`](../pixar-storyteller/SKILL.md). Output is
17
+ > provider-agnostic — provider tuning is
18
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md).
19
19
 
20
20
  ## When to use
21
21
 
@@ -38,9 +38,11 @@ Do NOT use when:
38
38
 
39
39
  1. Read the input line. Classify as **live-action / photoreal** or
40
40
  **animated / stylized**.
41
- 2. Live-action → load `hollywood-director` voice. Animated → load
42
- `pixar-storyboard-artist`. Hybrid (live-action with VFX)
43
- `hollywood-director`; record VFX intent in ENVIRONMENT.
41
+ 2. Live-action → load `hollywood-director` voice. Animated → hand
42
+ off to [`pixar-storyteller`](../pixar-storyteller/SKILL.md) (its
43
+ procedure carries the acting / beat-decomposition lens). Hybrid
44
+ (live-action with VFX) → `hollywood-director`; record VFX intent
45
+ in ENVIRONMENT.
44
46
  3. Check for an existing `character.json` lock under
45
47
  `agents/ai-video/<project>/characters/`.
46
48
 
@@ -120,3 +122,16 @@ Any "no" → revise that block.
120
122
  - Do NOT paraphrase identity tokens when a lock exists.
121
123
  - Do NOT mix live-action LENS prescriptions with animated STYLE
122
124
  anchors in the same scene — pick one mode.
125
+
126
+ ## Policies
127
+
128
+ The 12-block Cinematic Scene Blueprint is the policy choke point — every downstream skill (`motion-choreographer`, `video-director`) inherits whatever the blueprint encodes. Before emitting:
129
+
130
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when the SUBJECT block names or visually identifies a real person.
131
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the SUBJECT block is a recognised public figure.
132
+ - [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — when STYLE / ENVIRONMENT references a recognised brand's visual identity.
133
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — when STYLE anchors to a named living artist or studio as the primary signature.
134
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed blueprint output carries the AI-generation disclosure downstream.
135
+
136
+ Refuse-and-surface at the blueprint layer; do not push policy questions down to the adapter.
137
+
@@ -111,3 +111,16 @@ Any "no" → revise that block before handing off.
111
111
  - Do NOT collapse anticipation / action / reaction into one verb.
112
112
  - Do NOT use "cinematic" without lens + lighting + camera move.
113
113
  - Do NOT invent character details when a `character.json` exists.
114
+
115
+ ## Policies
116
+
117
+ 11-block cinematic prompt is live-action shape — real-person + brand-impersonation risks highest in cluster. Before emitting:
118
+
119
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — prompt names / visually identifies real person on camera.
120
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — subject is recognised public figure.
121
+ - [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — prompt copies journalism / broadcaster / regulated-industry visual identity.
122
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — LIGHT / LENS anchored to named living cinematographer's signature.
123
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed live-action AI clip carries non-removable AI-generation disclosure.
124
+
125
+ Refuse-and-surface at directorial layer; live-action realism amplifies every downstream policy gap.
126
+
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.py (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "2.23.0"
42
+ agent_config_version: "2.24.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -84,6 +84,22 @@ php artisan test # Tests (or: vendor/bin/phpunit)
84
84
 
85
85
  Check `AGENTS.md` or `Makefile` / `Taskfile.yml` for the exact commands.
86
86
 
87
+ ### CI-step gate (when `quality.local_auto_run: false`)
88
+
89
+ Roadmaps **must not** schedule full-pipeline literals (`task ci`,
90
+ `task ci-fast`, `task ci-strict`, `make ci`, `make test`,
91
+ `npm/pnpm run check`, `yarn check`, `composer test`, whole-suite
92
+ `vendor/bin/phpunit`, whole-suite `php artisan test`) as checkbox
93
+ steps when `quality.local_auto_run` is `false` in
94
+ `.agent-settings.yml` — `task lint-roadmap-ci-steps` blocks them.
95
+ Reword as narrow verifications (`vendor/bin/phpstan analyse
96
+ app/Modules/X`, `php artisan test --filter=…`) or mark with
97
+ `<!-- carve-out: new-gate-verification -->` when the step verifies a
98
+ **new** gate this roadmap introduces. At execution,
99
+ `/roadmap:process-*` flips matching steps to `[-]` with reason and
100
+ skips them. Full contract:
101
+ [`roadmap-ci-steps-policy`](../rules/roadmap-ci-steps-policy.md).
102
+
87
103
  ---
88
104
 
89
105
  ## Template
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "2.24.0",
9
+ "version": "2.25.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",