git:20261014.1cb9fe7 to git:20261015.843a315

93 added, 61 removed. Audit A to A.

---
name: asset-fallback-strategy
description: Provide a fallback strategy when an asset is unavailable, over-budget, license-blocked, or style-incompatible — without halting the recipe.
---
# asset-fallback-strategy
## Purpose
- When `asset-license-checker` / `asset-style-consistency-checker` / `glb-mobile-performance-budget` blocks an asset, this skill produces an actionable fallback (replace / re-source / generate procedural / drop with caveat) so the recipe can proceed.
+ When `asset-license-checker`, `asset-style-consistency-checker`, or `glb-mobile-performance-budget` blocks an asset (or an asset is unavailable), this skill plans 2-3 actionable fallback options (replace / re-source / procedural / generative / drop-with-caveat) ordered by speed so the recipe can proceed. Any chosen replacement must re-pass `asset-license-checker` and `asset-style-consistency-checker` (plus `glb-mobile-performance-budget` when budget applies).
## Quick start
- - read the failed asset + reason
- - propose 2-3 fallback options ordered by speed-to-implement
- - pick one with user agreement
- - update the asset list
+ - read the failed asset + blocking reason
+ - propose 2-3 fallback options ordered by speed-to-implement (always including `drop-with-caveat`)
+ - score each option on time, brief-match, and license
+ - pick one only with explicit user agreement
+ - update the asset list and route any replacement back through `asset-license-checker` and `asset-style-consistency-checker` (and `glb-mobile-performance-budget` if budget-constrained)
## When to use
- after a checker fails an asset
- when an asset cannot be acquired in time
- when budget excludes the originally-planned asset
- when license blocks an asset
## When not to use
- when no asset has failed (nothing to fall back to)
- pure exploration (no concrete asset list)
- when the user wants to wait for the original asset
## Trigger phrases
- "what if we can't get this asset"
- "fallback for the model"
- "the license blocks us"
- "scaled-down asset"
## Prerequisites / readiness
- failed asset + reason known
- recipe brief known (informs alternative selection)
## Input schema
### Required inputs
| Input | Why it is required |
|---|---|
| Failed asset + reason | Drives fallback search |
| Recipe brief | Alternative must satisfy brief |
| Time / budget remaining | Affects feasibility of options |
### Optional inputs
| Input | Use |
|---|---|
| Existing internal asset library | Source of fast fallbacks |
| Generative tool access (procedural / AI) | Adds option types |
### Assumptions to confirm
- The user accepts that a fallback is needed (vs waiting).
- "Drop with caveat" is a valid option even if not preferred.
## Output schema
### Primary output
- A fallback option table: option (replace / re-source / procedural / generative / drop), source / method, time-to-implement, brief match, license confidence, recommendation.
+ A fallback option table: option (`replace` / `re-source` / `procedural` / `generative` / `drop-with-caveat`), source / method, time-to-implement, brief-match, license, and recommendation.
### Secondary output
- - updated asset list reflecting picked fallback
- - caveat lines if "drop" is chosen
+ - updated asset list reflecting the user-approved fallback
+ - mandatory re-check routing for replacements (`asset-license-checker`, `asset-style-consistency-checker`, and `glb-mobile-performance-budget`)
+ - caveat lines if `drop-with-caveat` is chosen
- evidence label
### Evidence / caveat output
```txt
Runtime status: Not Run | Attempted | Produced | Verified | Failed
- Artifact status: Not Run | Not Produced | Produced | Verified | Failed
+ Artifact status: Not Run | Not Produced | Produced | Verified | Failed (default: Not Produced)
+ Rule: downgrade-only, never upgrade
Evidence used: <links, paths, logs, or "none">
Limitations: <known gaps>
```
## Required laws
- `../../laws/evidence-before-done.md`
- `../../laws/non-blender-user-language.md`
- `../../laws/no-arbitrary-python-interface.md`
- `../../laws/official-runtime-only.md`
## Official runtime boundary
- Process / planning skill — does not download / acquire / generate assets. Outputs a strategy.
+ Process and planning skill only — never acquires, generates, or edits assets itself. Outputs a fallback plan and routes execution or re-verification to dedicated skills.
## Operating procedure
- 1. Read failed asset + reason.
+
+ 1. Read failed asset + blocking reason.
2. Read brief style + budget context.
- 3. Generate 2-3 fallback options (see `references/fallback-option-types.md`).
- 4. Score each on time / brief match / license / quality.
- 5. Recommend one; require user agreement.
- 6. Update asset list; flag downstream rework needed.
+ 3. Propose 2-3 fallback options ordered by speed-to-implement (see `references/fallback-option-types.md`), always including `drop-with-caveat`.
+ 4. Score each option on time, brief-match, and license.
+ 5. Recommend one option and pause for explicit user agreement.
+ 6. Once agreed, update the asset list and route the replacement back into the check chain (`asset-license-checker`, `asset-style-consistency-checker`, and `glb-mobile-performance-budget`), or escalate to `blender-scope-boundary-enforcer` / `blender-recipe-decomposer` if no viable fallback exists.
## Decision tree
```txt
Failed by license?
- → Replace from CC0 source first; otherwise paid alternative
+ → (1) Replace from internal library (`asset-library-organization-planner`)
+ → (2) Re-source compliant alternative (`blender-asset-discovery-planner`)
+ → (3) Drop with caveat
Failed by budget (size/poly)?
- → Lower-poly version; or procedural; or simplification
+ → (1) Replace with lighter stand-in from internal library (`asset-library-organization-planner`)
+ → (2) Plan procedural / generative alternative
+ → (3) Drop with caveat
Failed by style?
- → Replace from same-style source; or restyle
+ → (1) Re-source style-aligned alternative (`blender-asset-discovery-planner`)
+ → (2) Plan procedural / generative alternative matching brief
+ → (3) Drop with caveat
Failed by unavailability?
- → Re-source from cache; or procedural; or drop with caveat
+ → (1) Replace from internal library (`asset-library-organization-planner`)
+ → (2) Plan procedural / generative alternative
+ → (3) Drop with caveat
```
## Playbooks
### Playbook A: Hero shoe model unavailable
- Options: (1) Use stand-in mesh from internal lib (fastest, may not match brand). (2) Source from photogrammetry service (slowest, exact). (3) Procedural / generative (medium, brand-aligned but stylization may drift).
+ Options (ordered by speed): (1) Replace with stand-in mesh from internal library via `asset-library-organization-planner` (fastest, lower brief-match). (2) Plan a procedural or generative alternative (medium speed, medium brief-match). (3) Drop with caveat: omit the hero shoe and adjust deliverables (fastest fallback exit, requires caveat note). Any replacement must re-pass `asset-license-checker` and `asset-style-consistency-checker`.
+
### Playbook B: HDRI blocked by license
- Options: (1) Replace with CC0 from polyhaven (fastest). (2) Bake HDR from procedural sky shader (medium). (3) Drop HDRI; rely on explicit lights (caveat: ambient feel changes).
+ Options (ordered by speed): (1) Drop with caveat: omit HDRI and rely on planned scene lighting (caveat: ambient reflection changes). (2) Re-source a license-clear HDRI via `blender-asset-discovery-planner` (fast, high brief-match). (3) Plan a procedural sky alternative (medium speed, medium brief-match). Any replacement must re-pass `asset-license-checker` and `asset-style-consistency-checker`.
+
### Playbook C: Texture over-budget
- Options: (1) Resize from 4K to 1K (fastest). (2) Replace with procedural noise + tiled detail (medium). (3) Drop texture variation; use solid color (caveat: visual difference).
+ Options (ordered by speed): (1) Drop with caveat: omit high-cost texture variation and use a simpler material plan (caveat: reduced surface detail). (2) Replace with a lighter asset from the internal library via `asset-library-organization-planner` (fast, medium brief-match). (3) Re-source a budget-compliant texture via `blender-asset-discovery-planner` (medium speed, high brief-match). Any replacement must re-pass `asset-license-checker`, `asset-style-consistency-checker`, and `glb-mobile-performance-budget`.
+
## Mode handling
### Text-only mode
- Strategy table only.
+ Output the fallback strategy table and wait for user agreement.
+
### Runtime-ready mode
- After picking fallback, hand off to discovery / asset-fetch action.
+ After user agreement on a fallback, hand off to `blender-asset-discovery-planner` (re-source) or `asset-library-organization-planner` (internal library), then require re-verification through `asset-license-checker`, `asset-style-consistency-checker`, and `glb-mobile-performance-budget`.
+
### Blocked runtime mode
- Strategy is forward-plan; no immediate action.
+ Strategy is recorded as a forward-plan; no immediate handoff execution.
+
## Validation checklist
- - [ ] Failed asset + reason explicit
- - [ ] 2-3 options with time / match / license columns
- - [ ] Recommendation explicit
- - [ ] User agreement evidence required
- - [ ] Updated asset list reflected
- - [ ] Caveat lines if "drop"
+ * [ ] Failed asset + blocking reason explicitly stated
+ * [ ] 2-3 options ordered by speed, scored on time, brief-match, and license
+ * [ ] `drop-with-caveat` option included
+ * [ ] Recommendation explicit and user agreement required before proceeding
+ * [ ] Updated asset list reflected after agreement
+ * [ ] Picked replacement routed back to `asset-license-checker` and `asset-style-consistency-checker` (plus `glb-mobile-performance-budget` when applicable)
+ * [ ] Caveat lines documented if `drop-with-caveat` is chosen
+
## Pass / Warn / Fail rubric
| Verdict | Criteria |
- |---|---|
- | Pass | 2-3 options + recommendation + agreement + updated list. |
- | Warn | Options present but recommendation soft. |
- | Fail | "Just drop it" without caveat; no alternatives explored; agreement missing. |
+ | --- | --- |
+ | Pass | 2-3 speed-ordered options (including `drop-with-caveat`) scored on time/brief-match/license + explicit recommendation + user agreement + updated list + re-check routing to `asset-license-checker` and `asset-style-consistency-checker`. |
+ | Warn | Options and `drop-with-caveat` present, but recommendation or re-check routing note is soft. |
+ | Fail | Missing `drop-with-caveat`; silent substitution without user agreement; skips replacement re-checks; or attempts to acquire, generate, or edit assets directly. |
## Failure handling
- - No viable fallback exists → recommend recipe scope reduction (drop the deliverable that needed this asset).
- - Fallback also blocks → repeat the cycle with new fallback search.
- - User refuses all options → document; flag as recipe-blocker.
+ * No viable fallback exists → hand off to `blender-scope-boundary-enforcer` for scope reduction or `blender-recipe-decomposer` to split the recipe.
+ * Picked replacement fails `asset-license-checker`, `asset-style-consistency-checker`, or `glb-mobile-performance-budget` → repeat the fallback planning cycle or escalate to scope reduction.
+ * User refuses all options → document refusal and flag as recipe-blocker.
+
## Troubleshooting
| Problem | Response |
- |---|---|
- | Fallback doesn't match brief | Either change brief or change fallback; do not silently lower quality. |
- | Procedural option requires modeling skill not available | Cross out; rely on replace / drop. |
- | Generative AI tool license unclear | Run through `asset-license-checker` first. |
+ | --- | --- |
+ | Fallback doesn't match brief | Propose scope reduction via `blender-scope-boundary-enforcer` or select another fallback; do not silently lower quality. |
+ | Procedural option requires unavailable capability | Cross out procedural option; rely on `replace`, `re-source`, or `drop-with-caveat`. |
+ | Replacement or generative candidate has unclear license or style fit | Route through `asset-license-checker` and `asset-style-consistency-checker` before accepting into the recipe. |
## Best practices
- Always offer at least 2 options.
- Always show a "drop with caveat" option (even if last choice).
- Time-to-implement is decisive; brief match is necessary; license confidence is non-negotiable.
- Keep this skill narrow.
## Good examples
- - "Failed: hero-shoe-mesh.glb (license-blocked). Options: (1) polyhaven CC0 generic shoe — 30 min, brief match low. (2) Buy commercial license $99 — 2 hr, exact match. (3) Procedural shape + texture — 4 hr, match medium. Recommended: (2) for brief fidelity. Decision needed."
+ * "Failed: `hero-shoe-mesh.glb` (blocked by `asset-license-checker`). Options (ordered by speed): (1) Drop with caveat — omit hero shoe mesh and note missing centerpiece (time: immediate, brief-match: low, license: clear). (2) Replace from internal library via `asset-library-organization-planner` — generic shoe stand-in (time: fast, brief-match: medium, license: pre-cleared). (3) Re-source compliant commercial mesh via `blender-asset-discovery-planner` (time: slower, brief-match: high, license: requires verification). Recommended: (3) for brief fidelity. User agreement required; once picked, replacement must re-pass `asset-license-checker` and `asset-style-consistency-checker`."
+
## Bad examples
- "We'll figure it out." — no options listed.
## User-facing response template
```txt
Failed asset: <name>
Reason: <license / budget / style / unavailable>
- | Option | Source / method | Time | Brief match | License | Recommendation |
- |---|---|---|---|---|---|
+ | Option | Type (replace / re-source / procedural / generative / drop-with-caveat) | Source / method | Time | Brief-match | License | Recommendation |
+ |---|---|---|---|---|---|---|
Recommendation: <option>
- Decision needed before continuing.
- Caveat lines (if drop): <list>
+ Decision needed: User agreement required before continuing.
+ Caveat lines (if drop-with-caveat): <list>
Updated asset list: <link or note>
- Limitations: <gaps>
- Next: discovery for selected fallback / scope reduction if all blocked
+ Next re-checks (if replacement picked): asset-license-checker, asset-style-consistency-checker, glb-mobile-performance-budget (if budget applies)
+ Escalation (if no viable fallback): blender-scope-boundary-enforcer or blender-recipe-decomposer
+ Runtime status: Not Run | Attempted | Produced | Verified | Failed
+ Artifact status: Not Run | Not Produced | Produced | Verified | Failed (default: Not Produced; downgrade-only)
+ Evidence used: <links, paths, logs, or "none">
+ Limitations: <known gaps>
```
## Anti-patterns
- - "Just drop it" without caveat.
- - Silently substituting without user agreement.
- - Inventing fallback sources.
- - Skipping the license check on the new fallback.
+ * Dropping an asset without an explicit caveat ("just drop it").
+ * Omitting `drop-with-caveat` from the proposed option set.
+ * Silently substituting an asset without user agreement.
+ * Inventing fallback sources or acquiring, generating, or editing assets directly.
+ * Skipping `asset-license-checker`, `asset-style-consistency-checker`, or `glb-mobile-performance-budget` on the chosen replacement.
+
## Cross-skill handoff
- - Discovery for new asset → `../blender-asset-discovery-planner/SKILL.md`
- - License check on fallback → `../asset-license-checker/SKILL.md`
- - Style check on fallback → `../asset-style-consistency-checker/SKILL.md`
- - Budget recheck → `../glb-mobile-performance-budget/SKILL.md`
- - Library lookup → `../asset-library-organization-planner/SKILL.md`
+ * Re-source external asset → `../blender-asset-discovery-planner/SKILL.md`
+ * Internal library lookup → `../asset-library-organization-planner/SKILL.md`
+ * License re-check on replacement → `../asset-license-checker/SKILL.md`
+ * Style re-check on replacement → `../asset-style-consistency-checker/SKILL.md`
+ * Budget re-check on replacement → `../glb-mobile-performance-budget/SKILL.md`
+ * Scope reduction when no viable fallback exists → `../blender-scope-boundary-enforcer/SKILL.md`
+ * Recipe split when no viable fallback exists → `../blender-recipe-decomposer/SKILL.md`
+
## Non-goals
- - Acquire the asset.
- - Run Blender.
- - Generate AI imagery.
+
+ * Acquire, generate, or edit assets itself.
+ * Run Blender or execute Python.
+ * Perform license, style, or performance budget checks itself.
## References
- `references/fallback-option-types.md`
- `references/scoring-rubric.md`
- `references/drop-with-caveat-rules.md`
- `../../docs/skill-system.md`