@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.
- package/.agent-src/commands/create-pr/description-only.md +39 -11
- package/.agent-src/commands/create-pr.md +59 -5
- package/.agent-src/commands/video/from-script.md +5 -5
- package/.agent-src/commands/video/storyboard.md +1 -1
- package/.agent-src/contexts/execution/roadmap-process-loop.md +69 -14
- package/.agent-src/personas/README.md +3 -2
- package/.agent-src/personas/ai-video-technical-director.md +2 -2
- package/.agent-src/personas/hollywood-director.md +3 -3
- package/.agent-src/profiles/content_creator.yml +5 -0
- package/.agent-src/rules/media-governance-routing.md +82 -0
- package/.agent-src/rules/persona-governance.md +90 -0
- package/.agent-src/rules/post-push-rewrite-discipline.md +70 -0
- package/.agent-src/rules/provider-lifecycle-discipline.md +75 -0
- package/.agent-src/rules/roadmap-ci-steps-policy.md +145 -0
- package/.agent-src/rules/roadmap-progress-sync.md +11 -5
- package/.agent-src/skills/character-consistency/SKILL.md +12 -1
- package/.agent-src/skills/git-workflow/SKILL.md +133 -0
- package/.agent-src/skills/motion-choreographer/SKILL.md +12 -0
- package/.agent-src/skills/pixar-storyteller/SKILL.md +19 -6
- package/.agent-src/skills/roadmap-writing/SKILL.md +10 -0
- package/.agent-src/skills/scene-expander/SKILL.md +22 -7
- package/.agent-src/skills/video-director/SKILL.md +13 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/roadmaps.md +16 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +43 -0
- package/README.md +5 -3
- package/config/agent-settings.template.yml +26 -0
- package/docs/architecture.md +1 -1
- package/docs/catalog.md +5 -2
- package/docs/contracts/file-ownership-matrix.json +81 -13
- package/docs/contracts/provider-lifecycle.md +122 -0
- package/docs/decisions/ADR-011-domain-pack-readiness.md +213 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/getting-started-by-role.md +10 -0
- package/docs/getting-started.md +1 -1
- package/docs/personas.md +73 -26
- package/docs/profiles.md +9 -4
- package/package.json +1 -1
- package/scripts/_tmp_scan_framework_leakage.py +119 -0
- package/scripts/ai-video/adapters/gemini-veo.sh +5 -0
- package/scripts/ai-video/adapters/higgsfield.sh +6 -0
- package/scripts/ai-video/adapters/kling.sh +5 -0
- package/scripts/ai-video/adapters/openai-images.sh +5 -0
- package/scripts/ai-video/adapters/sora.sh +6 -0
- package/scripts/check_portability.py +6 -0
- package/scripts/lint_media_policy_linkage.py +140 -0
- package/scripts/lint_persona_governance.py +164 -0
- package/scripts/lint_roadmap_ci_steps.py +182 -0
- package/scripts/smoke/schema.sh +1 -1
- 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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
>
|
|
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
|
|
17
|
-
>
|
|
18
|
-
> is
|
|
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 →
|
|
42
|
-
`pixar-
|
|
43
|
-
|
|
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.
|
|
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
|