@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
package/CHANGELOG.md CHANGED
@@ -702,6 +702,49 @@ our recommendation order, not its support status.
702
702
  > that forces a new era split (`# Era: 2.21.x`, etc.) — see
703
703
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
704
704
 
705
+ ## [2.25.0](https://github.com/event4u-app/agent-config/compare/2.24.0...2.25.0) (2026-05-18)
706
+
707
+ ### Features
708
+
709
+ * **rules:** add post-push-rewrite-discipline tier-2a guard ([1af51e1](https://github.com/event4u-app/agent-config/commit/1af51e1809de3522bd344453cc7e6206032f5d4a))
710
+ * enforce roadmap CI-steps policy as Hard Gate ([a2ec868](https://github.com/event4u-app/agent-config/commit/a2ec868e81a9d9a4644d04704ff964b67754b2b2))
711
+ * **provider-lifecycle:** tier adapters and enforce safety gates ([e9771e6](https://github.com/event4u-app/agent-config/commit/e9771e672e07804ff80b4f182c7b095acec6995d))
712
+ * **policy:** add media governance policy layer ([4adc2ac](https://github.com/event4u-app/agent-config/commit/4adc2ac19fa31a6b0393ba4f662d91e85e6c63d0))
713
+
714
+ ### Bug Fixes
715
+
716
+ * **ci:** extend portability skip-list with roadmap-ci-steps-policy files ([c68893d](https://github.com/event4u-app/agent-config/commit/c68893dfcb6189a951deb0ebab9802683e705d7a))
717
+ * **ci:** repair archived-roadmap refs + bump smoke warn baseline ([11e181b](https://github.com/event4u-app/agent-config/commit/11e181b78a8303fc54cc4aa79138753b1c0c4148))
718
+
719
+ ### Performance
720
+
721
+ * **roadmap:** batchable dashboard regen + parallel step reads in autonomous runs ([c1aa3a5](https://github.com/event4u-app/agent-config/commit/c1aa3a51cf1d99e71151f1d7116ab970d36cd85b))
722
+ * **create-pr:** mandate single github-api call and parallel context fetch ([cbade08](https://github.com/event4u-app/agent-config/commit/cbade08df40b0d501791eeb6847e6452b2971d1d))
723
+
724
+ ### Documentation
725
+
726
+ * **skills:** expand git-workflow with safe-squash and divergent-state recovery ([745859f](https://github.com/event4u-app/agent-config/commit/745859f100c1ffd6d607de81f701dacefb1feff0))
727
+ * **roadmap:** add framework-neutrality-audit roadmap + scan evidence ([6daf8b8](https://github.com/event4u-app/agent-config/commit/6daf8b8a0a16880f02a7afb1fb07cf7526be3c28))
728
+ * **adr:** record ADR-011 domain-pack readiness (Phase 6) ([830cefa](https://github.com/event4u-app/agent-config/commit/830cefafdbec8474d1f6f71421457d1761f746ab))
729
+ * **roadmap:** file Phase 5 advisory issues #178-#180 and sync dashboard ([3859d08](https://github.com/event4u-app/agent-config/commit/3859d085ebf7cf9bc091ae55d3e8ad1e15893dcb))
730
+ * **roadmap:** add universal-platform-refinement roadmap ([0912bb5](https://github.com/event4u-app/agent-config/commit/0912bb505dac59ac5d4cc5e25b42b2f1d6efa694))
731
+
732
+ ### Tests
733
+
734
+ * **ai-video:** add blueprint, prompt-optimizer, adapter-contract suites (Phase 4) ([7762df7](https://github.com/event4u-app/agent-config/commit/7762df720412049f6d3b12bd328cd7c9a78b215b))
735
+
736
+ ### Chores
737
+
738
+ * add claude rules ([744328d](https://github.com/event4u-app/agent-config/commit/744328d57b4ba3c502ab3b41ded10e25ba3db8cf))
739
+ * compress 4 .md files into .agent-src/ ([96ef2f9](https://github.com/event4u-app/agent-config/commit/96ef2f94504661f71b86a3fb16762069c39caaa7))
740
+ * regenerate compiled trees for new rule (82 to 83) ([8b8af6a](https://github.com/event4u-app/agent-config/commit/8b8af6a4a918e927dbaafaeadc4402e3a7220981))
741
+
742
+ ### Other
743
+
744
+ * Clarify skills, rules, and commands description ([b586a0c](https://github.com/event4u-app/agent-config/commit/b586a0c6895da701a2719aeb4758f14cbe3fc2db))
745
+
746
+ Tests: 4664 (+95 since 2.24.0)
747
+
705
748
  ## [2.24.0](https://github.com/event4u-app/agent-config/compare/2.23.0...2.24.0) (2026-05-17)
706
749
 
707
750
  ### Features
package/README.md CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  # Agent Config — Universal AI Agent OS
4
4
 
5
- [![Skills](https://img.shields.io/badge/Skills-216-1f6feb?style=flat-square)](.augment/skills/) [![Rules](https://img.shields.io/badge/Rules-79-d73a49?style=flat-square)](.augment/rules/) [![Commands](https://img.shields.io/badge/Commands-129-2da44e?style=flat-square)](.augment/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-73-8957e5?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-25-bf8700?style=flat-square)](docs/personas.md) [![Advisors](https://img.shields.io/badge/Advisors-5-fb8500?style=flat-square)](docs/profiles.md) [![AI Tools](https://img.shields.io/badge/AI%20Tools-8-1abc9c?style=flat-square)](docs/architecture.md) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)
5
+ [![Skills](https://img.shields.io/badge/Skills-216-1f6feb?style=flat-square)](.augment/skills/) [![Rules](https://img.shields.io/badge/Rules-84-d73a49?style=flat-square)](.augment/rules/) [![Commands](https://img.shields.io/badge/Commands-129-2da44e?style=flat-square)](.augment/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-73-8957e5?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-24-bf8700?style=flat-square)](docs/personas.md) [![Advisors](https://img.shields.io/badge/Advisors-5-fb8500?style=flat-square)](docs/profiles.md) [![AI Tools](https://img.shields.io/badge/AI%20Tools-8-1abc9c?style=flat-square)](docs/architecture.md) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)
6
6
 
7
7
  > **A deterministic orchestration contract for AI agents — audited skills, governance rules, replayable state — usable by developers, founders, and creators alike.**
8
8
 
9
- Give your AI agents an audit-disciplined execution layer: **210 skills**, **79 governance rules**, **129 commands**, and a replayable state machine that turns any host agent (Claude Code, Augment, Cursor, Copilot, Windsurf) into a reliable team member.
9
+ Give your AI agents an audit-disciplined execution layer: multiple **skills**, **governance rules**, **commands**, and a replayable state machine that turns any host agent (Claude Code, Augment, Cursor, Copilot, Windsurf) into a reliable team member.
10
+
11
+ > **Cinematic AI video** — script → character-locked image → motion+audio prompt → provider render → stitched clip, with `AIV_DRYRUN=true` as the cost-safety default. See [`/video:from-script`](.augment/commands/video/from-script.md).
10
12
 
11
13
  ### Pick your profile — six entry paths
12
14
 
@@ -17,7 +19,7 @@ entries, no role-detection guesswork.
17
19
  | Profile (`profile.id`) | Audience | First commands | First skills |
18
20
  |---|---|---|---|
19
21
  | 👩‍💻 [`developer`](docs/profiles.md#profile-developer) | IC engineer | `/implement-ticket` · `/work` · `/review-changes` · `/fix` · `/commit` | `developer-like-execution` · `verify-completion-evidence` · `minimal-safe-diff` · `systematic-debugging` · `test-driven-development` |
20
- | ✍️ [`content_creator`](docs/profiles.md#profile-content_creator) | Writers, ghostwriters, marketers | `/work` · `/post-as` · `/ghostwriter` · `/optimize-prompt` | `voice-and-tone-design` · `messaging-architecture` · `editorial-calendar` · `release-comms` · `prompt-engineering-patterns` |
22
+ | ✍️ [`content_creator`](docs/profiles.md#profile-content_creator) | Writers, ghostwriters, marketers | `/work` · `/post-as` · `/ghostwriter` · `/optimize-prompt` · `/video:from-script` · `/video:storyboard` | `voice-and-tone-design` · `messaging-architecture` · `editorial-calendar` · `release-comms` · `character-consistency` |
21
23
  | 🚀 [`founder`](docs/profiles.md#profile-founder) | Solo / early-stage founder | `/work` · `/feature` · `/challenge-me` · `/council` | `refine-prompt` · `rice-prioritization` · `vision-articulation` · `fundraising-narrative` · `runway-cognition` |
22
24
  | 🏛 [`agency`](docs/profiles.md#profile-agency) | Multi-client delivery shop | `/work` · `/implement-ticket` · `/refine-ticket` · `/feature` · `/roadmap` | `doc-coauthoring` · `decision-record` · `refine-ticket` · `estimate-ticket` · `perf-feedback-craft` |
23
25
  | 💼 [`finance`](docs/profiles.md#profile-finance) | CFO / fractional finance / FP&A | `/work` · `/council` · `/challenge-me` | `dcf-modeling` · `forecasting` · `scenario-modeling` · `unit-economics-modeling` · `runway-cognition` |
@@ -209,6 +209,32 @@ roadmap:
209
209
  # is mandatory before any "roadmap complete" claim regardless of cadence.
210
210
  quality_cadence: end_of_roadmap
211
211
 
212
+ # Dashboard regen cadence inside autonomous runs (process-step /
213
+ # process-phase / process-full). Controls how often
214
+ # `./agent-config roadmap:progress` runs **between** steps in a
215
+ # single session. The dashboard is always regenerated at the start
216
+ # of the run, at every phase boundary, and at run end — this knob
217
+ # only affects the inter-step beat.
218
+ #
219
+ # per_step = legacy default: regen after every checkbox flip.
220
+ # Safest for crash recovery; highest subprocess
221
+ # overhead. Use when a session may be killed
222
+ # mid-roadmap and a fresh dashboard must always
223
+ # reflect the last-saved step.
224
+ # every_5_steps = batch flips, regen every 5 closed steps + at
225
+ # every phase boundary. Balanced cost/freshness
226
+ # for runs of 20–100 steps.
227
+ # phase_boundary = regen only at phase boundaries + run end.
228
+ # Cheapest for long roadmaps (100+ steps).
229
+ # The checkbox flip itself is still inline per
230
+ # Iron Law 2 — only the subprocess regen batches.
231
+ #
232
+ # `process-step` ignores this knob (single-step runs always regen
233
+ # at the end of the step). The Iron Law 1 mandate to regen on any
234
+ # file-shape touch (rename / phase add / archive) still fires
235
+ # immediately regardless of this setting.
236
+ dashboard_regen_cadence: per_step
237
+
212
238
  # Visible-horizon framing in roadmap authoring (integer weeks, default 0).
213
239
  # 0 = off (default). Time-boxed plate / horizon framing is forbidden:
214
240
  # no `## Horizon (N-week visible plate)` sections, no
@@ -142,7 +142,7 @@ note, package-internal path-swap, description budget, and the
142
142
  | Layer | Count | Purpose |
143
143
  |---|---|---|
144
144
  | **Skills** | 216 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
145
- | **Rules** | 79 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
145
+ | **Rules** | 84 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
146
146
  | **Commands** | 129 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
147
147
  | **Guidelines** | 73 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
148
148
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
package/docs/catalog.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **494 public artefacts** shipped by
3
+ Consumer-facing catalog of all **497 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
@@ -228,7 +228,7 @@ are excluded.
228
228
  | skill | [`voice-and-tone-design`](../.agent-src/skills/voice-and-tone-design/SKILL.md) | | Use when shaping brand voice — voice attributes, tone-by-context matrix, consistency review. Triggers on 'define our voice', 'why does our copy sound different on every surface'. |
229
229
  | skill | [`websocket`](../.agent-src/skills/websocket/SKILL.md) | | Use when building real-time features — WebSocket broadcasting, live updates, presence channels, connection state — even when the user just says 'push this to the client live'. |
230
230
 
231
- ## Rules (76)
231
+ ## Rules (79)
232
232
 
233
233
  | kind | name | type | description |
234
234
  |---|---|---|---|
@@ -276,6 +276,7 @@ are excluded.
276
276
  | rule | [`laravel-translations`](../.agent-src/rules/laravel-translations.md) | auto | Laravel language files, translations, i18n, lang/de, lang/en, __() helper, localization, multilingual text |
277
277
  | rule | [`low-impact-corpus-privacy-floor`](../.agent-src/rules/low-impact-corpus-privacy-floor.md) | auto | Writing, editing, or upstreaming entries in `agents/low-impact-decisions.md` — non-bypassable privacy floor for the learning corpus. |
278
278
  | rule | [`markdown-safe-codeblocks`](../.agent-src/rules/markdown-safe-codeblocks.md) | auto | Generating markdown output that contains code blocks — prevent broken nesting |
279
+ | rule | [`media-governance-routing`](../.agent-src/rules/media-governance-routing.md) | auto | When generating AI video/image/voice — surface project-local media policies (likeness, style, public-figures, voice-cloning, disclosure) |
279
280
  | rule | [`minimal-safe-diff`](../.agent-src/rules/minimal-safe-diff.md) | auto | When writing or reviewing a diff — the smallest change that solves the stated problem; no drive-by edits, opportunistic refactors, or reformatting |
280
281
  | rule | [`missing-tool-handling`](../.agent-src/rules/missing-tool-handling.md) | auto | When a CLI tool needed for the task is not installed — ask before working around it; do NOT install silently |
281
282
  | rule | [`model-recommendation`](../.agent-src/rules/model-recommendation.md) | auto | Starting a new task, switching task type, or invoking a command — detect complexity and recommend optimal model (Opus/Sonnet/GPT) before work |
@@ -286,8 +287,10 @@ are excluded.
286
287
  | rule | [`non-destructive-by-default`](../.agent-src/rules/non-destructive-by-default.md) | always | Agent is never destructive — Hard Floor always asks for prod-trunk merges, deploys, pushes, prod data/infra, bulk deletions, and bulk-deletion/infra commits; no autonomy or roadmap bypass |
287
288
  | rule | [`onboarding-gate`](../.agent-src/rules/onboarding-gate.md) | auto | First turn of a conversation on a project — check onboarding.onboarded in .agent-settings.yml; when false, prompt to run /onboard before any request |
288
289
  | rule | [`package-ci-checks`](../.agent-src/rules/package-ci-checks.md) | manual | Before pushing to remote or creating a PR in the agent-config package — run all CI checks locally first |
290
+ | rule | [`persona-governance`](../.agent-src/rules/persona-governance.md) | auto | When creating, editing, or proposing personas — enforce per-domain cap (≤ 2 specialists), ≥ 1 skill citation, and the deprecation path |
289
291
  | rule | [`php-coding`](../.agent-src/rules/php-coding.md) | auto | Writing or reviewing PHP code — strict types, naming, comparisons, early returns, Eloquent conventions |
290
292
  | rule | [`preservation-guard`](../.agent-src/rules/preservation-guard.md) | auto | When merging, refactoring, compressing, or restructuring skills, rules, commands, or guidelines — prevent quality loss |
293
+ | rule | [`provider-lifecycle-discipline`](../.agent-src/rules/provider-lifecycle-discipline.md) | auto | When editing an AI video/image/audio adapter — declare lifecycle tier (experimental \| stable \| deprecated \| community); never default to non-stable |
291
294
  | rule | [`reviewer-awareness`](../.agent-src/rules/reviewer-awareness.md) | auto | When suggesting reviewers or flagging risk hotspots — anchor in paths/risk + ownership-map + bug-patterns; medium/high needs primary + secondary |
292
295
  | rule | [`roadmap-progress-sync`](../.agent-src/rules/roadmap-progress-sync.md) | auto | Any roadmap touch (file move, checkbox flip, phase change) regens dashboard same response; archive at 0 open. Autonomous runs flip checkboxes inline |
293
296
  | rule | [`role-mode-adherence`](../.agent-src/rules/role-mode-adherence.md) | auto | When roles.active_role is set in .agent-settings.yml — closing outputs must match the mode's contract and emit the structured mode marker |
@@ -1095,12 +1095,6 @@
1095
1095
  "load_context": [],
1096
1096
  "load_context_eager": []
1097
1097
  },
1098
- ".agent-src.uncompressed/personas/pixar-storyboard-artist.md": {
1099
- "kind": "persona",
1100
- "rule_type": null,
1101
- "load_context": [],
1102
- "load_context_eager": []
1103
- },
1104
1098
  ".agent-src.uncompressed/personas/product-owner.md": {
1105
1099
  "kind": "persona",
1106
1100
  "rule_type": null,
@@ -1451,6 +1445,12 @@
1451
1445
  "load_context": [],
1452
1446
  "load_context_eager": []
1453
1447
  },
1448
+ ".agent-src.uncompressed/rules/media-governance-routing.md": {
1449
+ "kind": "rule",
1450
+ "rule_type": "auto",
1451
+ "load_context": [],
1452
+ "load_context_eager": []
1453
+ },
1454
1454
  ".agent-src.uncompressed/rules/minimal-safe-diff.md": {
1455
1455
  "kind": "rule",
1456
1456
  "rule_type": "auto",
@@ -1513,6 +1513,12 @@
1513
1513
  "load_context": [],
1514
1514
  "load_context_eager": []
1515
1515
  },
1516
+ ".agent-src.uncompressed/rules/persona-governance.md": {
1517
+ "kind": "rule",
1518
+ "rule_type": "auto",
1519
+ "load_context": [],
1520
+ "load_context_eager": []
1521
+ },
1516
1522
  ".agent-src.uncompressed/rules/php-coding.md": {
1517
1523
  "kind": "rule",
1518
1524
  "rule_type": "auto",
@@ -1525,6 +1531,12 @@
1525
1531
  "load_context": [],
1526
1532
  "load_context_eager": []
1527
1533
  },
1534
+ ".agent-src.uncompressed/rules/provider-lifecycle-discipline.md": {
1535
+ "kind": "rule",
1536
+ "rule_type": "auto",
1537
+ "load_context": [],
1538
+ "load_context_eager": []
1539
+ },
1528
1540
  ".agent-src.uncompressed/rules/reviewer-awareness.md": {
1529
1541
  "kind": "rule",
1530
1542
  "rule_type": "auto",
@@ -6116,6 +6128,13 @@
6116
6128
  "via": "body_link",
6117
6129
  "depth": 1
6118
6130
  },
6131
+ {
6132
+ "source": ".agent-src.uncompressed/personas/README.md",
6133
+ "target": ".agent-src.uncompressed/rules/persona-governance.md",
6134
+ "type": "READ_ONLY",
6135
+ "via": "body_link",
6136
+ "depth": 1
6137
+ },
6119
6138
  {
6120
6139
  "source": ".agent-src.uncompressed/personas/_template-specialist/persona.md",
6121
6140
  "target": ".agent-src.uncompressed/personas/_template-specialist/persona.md",
@@ -6263,13 +6282,6 @@
6263
6282
  "via": "self",
6264
6283
  "depth": 0
6265
6284
  },
6266
- {
6267
- "source": ".agent-src.uncompressed/personas/pixar-storyboard-artist.md",
6268
- "target": ".agent-src.uncompressed/personas/pixar-storyboard-artist.md",
6269
- "type": "WRITE",
6270
- "via": "self",
6271
- "depth": 0
6272
- },
6273
6285
  {
6274
6286
  "source": ".agent-src.uncompressed/personas/product-owner.md",
6275
6287
  "target": ".agent-src.uncompressed/personas/product-owner.md",
@@ -7117,6 +7129,13 @@
7117
7129
  "via": "self",
7118
7130
  "depth": 0
7119
7131
  },
7132
+ {
7133
+ "source": ".agent-src.uncompressed/rules/media-governance-routing.md",
7134
+ "target": ".agent-src.uncompressed/rules/media-governance-routing.md",
7135
+ "type": "WRITE",
7136
+ "via": "self",
7137
+ "depth": 0
7138
+ },
7120
7139
  {
7121
7140
  "source": ".agent-src.uncompressed/rules/minimal-safe-diff.md",
7122
7141
  "target": ".agent-src.uncompressed/rules/minimal-safe-diff.md",
@@ -7327,6 +7346,27 @@
7327
7346
  "via": "self",
7328
7347
  "depth": 0
7329
7348
  },
7349
+ {
7350
+ "source": ".agent-src.uncompressed/rules/persona-governance.md",
7351
+ "target": ".agent-src.uncompressed/rules/persona-governance.md",
7352
+ "type": "WRITE",
7353
+ "via": "self",
7354
+ "depth": 0
7355
+ },
7356
+ {
7357
+ "source": ".agent-src.uncompressed/rules/persona-governance.md",
7358
+ "target": ".agent-src.uncompressed/rules/skill-quality.md",
7359
+ "type": "READ_ONLY",
7360
+ "via": "body_link",
7361
+ "depth": 1
7362
+ },
7363
+ {
7364
+ "source": ".agent-src.uncompressed/rules/persona-governance.md",
7365
+ "target": ".agent-src.uncompressed/skills/pixar-storyteller/SKILL.md",
7366
+ "type": "READ_ONLY",
7367
+ "via": "body_link",
7368
+ "depth": 1
7369
+ },
7330
7370
  {
7331
7371
  "source": ".agent-src.uncompressed/rules/php-coding.md",
7332
7372
  "target": ".agent-src.uncompressed/rules/php-coding.md",
@@ -7341,6 +7381,27 @@
7341
7381
  "via": "self",
7342
7382
  "depth": 0
7343
7383
  },
7384
+ {
7385
+ "source": ".agent-src.uncompressed/rules/provider-lifecycle-discipline.md",
7386
+ "target": ".agent-src.uncompressed/rules/ask-when-uncertain.md",
7387
+ "type": "READ_ONLY",
7388
+ "via": "body_link",
7389
+ "depth": 1
7390
+ },
7391
+ {
7392
+ "source": ".agent-src.uncompressed/rules/provider-lifecycle-discipline.md",
7393
+ "target": ".agent-src.uncompressed/rules/media-governance-routing.md",
7394
+ "type": "READ_ONLY",
7395
+ "via": "body_link",
7396
+ "depth": 1
7397
+ },
7398
+ {
7399
+ "source": ".agent-src.uncompressed/rules/provider-lifecycle-discipline.md",
7400
+ "target": ".agent-src.uncompressed/rules/provider-lifecycle-discipline.md",
7401
+ "type": "WRITE",
7402
+ "via": "self",
7403
+ "depth": 0
7404
+ },
7344
7405
  {
7345
7406
  "source": ".agent-src.uncompressed/rules/reviewer-awareness.md",
7346
7407
  "target": ".agent-src.uncompressed/rules/reviewer-awareness.md",
@@ -11338,6 +11399,13 @@
11338
11399
  "via": "body_link",
11339
11400
  "depth": 1
11340
11401
  },
11402
+ {
11403
+ "source": ".agent-src.uncompressed/skills/scene-expander/SKILL.md",
11404
+ "target": ".agent-src.uncompressed/skills/pixar-storyteller/SKILL.md",
11405
+ "type": "READ_ONLY",
11406
+ "via": "body_link",
11407
+ "depth": 1
11408
+ },
11341
11409
  {
11342
11410
  "source": ".agent-src.uncompressed/skills/scene-expander/SKILL.md",
11343
11411
  "target": ".agent-src.uncompressed/skills/scene-expander/SKILL.md",
@@ -0,0 +1,122 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-08-15
4
+ ---
5
+
6
+ # Provider Lifecycle — AI Video / Image / Audio Adapter Tiers
7
+
8
+ > **Status:** active · **Stability:** beta · **Owner:** universal-platform-refinement Phase 3
9
+ > · **Linter:** none (declarative contract; enforced agent-in-the-loop via [`provider-lifecycle-discipline`](../../.agent-src/rules/provider-lifecycle-discipline.md))
10
+ > · **Source-of-truth template:** [`agents/.ai-video.xml.example`](../../agents/.ai-video.xml.example)
11
+
12
+ Locks the lifecycle tagging used on every adapter under
13
+ `scripts/ai-video/adapters/` (and future `scripts/ai-image/`,
14
+ `scripts/ai-audio/` peers). The tag is declarative — it tells the
15
+ agent what the maintainer's confidence in the adapter is, so the
16
+ agent can refuse to *default* to an under-validated provider without
17
+ the human noticing.
18
+
19
+ ## § 1 — Tiers
20
+
21
+ | Tier | Meaning | Default-eligibility |
22
+ |---|---|---|
23
+ | `stable` | Maintainer-validated against a real API run at least once; dry-run output matches the documented contract; secret-redaction confirmed on a live response | **Yes** — `/video:*` / `/image:*` / `/audio:*` commands may default to a `stable` adapter |
24
+ | `experimental` | Adapter shipped; structural shape matches the contract; **no real-API smoke run by a maintainer yet** | **No** — must be invoked explicitly (`--provider <id>`), never silently the default |
25
+ | `deprecated` | Replaced by a successor; kept for one release window so consumer scripts can migrate | **No** — refusal-and-surface: the agent names the successor before running |
26
+ | `community` | Contributed externally; maintained on a best-effort basis; behaviour outside the maintainer's smoke-test matrix | **No** — explicit opt-in only; the agent surfaces "community-tier provider" in the run summary |
27
+
28
+ ## § 2 — Promotion path
29
+
30
+ `experimental → stable` requires three checkmarks on the same commit
31
+ (or on a tightly-scoped follow-up commit referencing the original):
32
+
33
+ 1. **Real-API smoke run** — at least one live `submit / poll / fetch`
34
+ cycle (or `run` for sync adapters) against the documented
35
+ `default-model`, captured under
36
+ `agents/ai-video/smoke-traces/<provider>.md` with timestamp,
37
+ model id, and **redacted** response shape.
38
+ 2. **Secret-redaction confirmation** — the captured trace, re-read
39
+ through `scripts/ai-video/lib/redact.sh`, shows zero residual
40
+ key fragments.
41
+ 3. **Contract conformance** — the adapter's four-method shell
42
+ surface (`submit / poll / fetch / dry-run` *or* `run / dry-run`)
43
+ matches `scripts/ai-video/lib/adapter-contract.md` verbatim.
44
+
45
+ A maintainer flipping the tier in `agents/.ai-video.xml.example`
46
+ **and** the adapter header comment is the promotion event. There is
47
+ no separate registry — the example file is the registry.
48
+
49
+ ## § 3 — Demotion criteria
50
+
51
+ `stable → experimental` (or `stable → deprecated`) on any of:
52
+
53
+ - **Provider API contract drift** that breaks the adapter against
54
+ the documented `default-model` for ≥ 7 calendar days without a
55
+ maintainer fix.
56
+ - **Auth-flow change** that invalidates the redaction matchers in
57
+ `lib/redact.sh` until the matchers are extended.
58
+ - **Successor adapter declared** (use `deprecated`, not
59
+ `experimental`, and record the successor in the header comment).
60
+
61
+ Demotion is the maintainer's call; the rule does not auto-demote.
62
+
63
+ ## § 4 — Agent obligations
64
+
65
+ When the agent picks a provider for a `/video:*` / `/image:*` /
66
+ `/audio:*` run, it MUST:
67
+
68
+ 1. **Read** the `provider_lifecycle` tag from the adapter's header
69
+ comment **and** the matching `<provider id="…">` block in
70
+ `agents/.ai-video.xml.example` (or the operator's
71
+ `agents/.ai-video.xml`).
72
+ 2. **Refuse-and-surface** if the operator's resolved default is a
73
+ non-`stable` tier — name the tier and the path to this contract
74
+ document, then emit one clarifying question (per
75
+ [`ask-when-uncertain`](../../.augment/rules/ask-when-uncertain.md)):
76
+ either pick a `stable` provider, or confirm the non-stable run.
77
+ 3. **Record** in the run summary which tier the chosen adapter
78
+ carries — this is the audit log entry the agent-in-the-loop
79
+ model rests on.
80
+
81
+ The agent never picks `deprecated` silently. If a successor is
82
+ declared, the agent surfaces "X is deprecated; successor: Y" before
83
+ running.
84
+
85
+ ## § 5 — Day-one assignment
86
+
87
+ The five shipped adapters carry the following tiers on the day
88
+ this contract lands (PR `universal-platform-refinement`):
89
+
90
+ | Adapter | Kind | Tier | Rationale |
91
+ |---|---|---|---|
92
+ | `openai-images` | image | `experimental` | Structural shape conformant; no maintainer real-API smoke captured yet |
93
+ | `gemini-veo` | video | `experimental` | Default video provider; no real-API smoke captured yet |
94
+ | `kling` | video | `experimental` | Async contract conformant; no maintainer real-API smoke captured yet |
95
+ | `higgsfield` | image+video | `experimental` | Capability-discovery path conformant; no real-API smoke captured yet |
96
+ | `sora` | video | `experimental` | Structural-prompt path conformant; no real-API smoke captured yet |
97
+
98
+ **All five start as `experimental` on day one.** The promotion to
99
+ `stable` happens per-adapter, on the commit that records the first
100
+ real-API smoke trace. This is conservative by construction: a
101
+ `/video:*` run today resolves to a default that is `experimental`,
102
+ so the agent surfaces the tier and asks before proceeding — the
103
+ human is the policy decision point.
104
+
105
+ The `<default-image-provider>` and `<default-video-provider>`
106
+ entries in `agents/.ai-video.xml.example` remain unchanged
107
+ (`openai-images` and `gemini-veo`). The tier tag does not change
108
+ defaults; it changes whether the agent silently honours them.
109
+
110
+ ## § 6 — Versioning
111
+
112
+ Tier rename or new tier is breaking (linter and adapter headers
113
+ both flip); promotion / demotion of an individual adapter is not
114
+ breaking. The Day-One Assignment table above is the per-release
115
+ snapshot — older snapshots live in git history, not in this file.
116
+
117
+ ## See also
118
+
119
+ - [`provider-lifecycle-discipline`](../../.agent-src/rules/provider-lifecycle-discipline.md) — the tier-2 routing rule that surfaces this contract when a provider is touched.
120
+ - [`scripts/ai-video/lib/adapter-contract.md`](../../scripts/ai-video/lib/adapter-contract.md) — the four-method shell contract every adapter implements.
121
+ - [`agents/.ai-video.xml.example`](../../agents/.ai-video.xml.example) — operator-facing provider configuration template (carries the tier tag inline).
122
+ - [`agents/policies/media/README.md`](../../agents/policies/media/README.md) — the agent-in-the-loop enforcement model this contract participates in.