Start a fresh conversation. Replace the highlighted placeholders.
Use bevy-rea to scaffold a Bevy 0.20 crate at [output path] from [GDAS-reader ledger path], only after gdas-reader has run and the ledger scores at least 3. Use project-foundations context and emit_project.py: one Plugin and empty Update system for every entry, including unknowns, plus comments naming ID/status/evidence/suggested skill and COVERAGE.md with limits. Return the crate, self-test result, and band-4 coverage assessment. Add no inferred gameplay, components, Resources, decompiled Rust, or Godot types. Default to placeholders; asset bytes require both explicit --allow-assets and a nonblank, non-unspecified entry license. Use the linked GDAS-reader location, never an assumed sibling path.
Required inputs
GDAS-reader ledger path
output path
ledger score and limits
explicit asset-copy choice if requested
User-approved starter prompt based on a pinned source version; check current skill requirements before running. Task evidence ↗
SKILL.md
name: bevy-readescription: "Emit a Bevy 0.20 crate from a GDAS-reader evidence ledger. Each confirmed or unknown entry becomes a plugin stub. Use after gdas-reader, not as a decompiler. Keywords: bevy-rea, reconstruction, ledger, emit_project, Bevy 0.20."
bevy-rea
Turn a GDAS-reader ledger into a Bevy 0.20 crate. Plugins are stubs. They do not reimplement the artifact.
When to use
Load this when the ledger exists and the reconstruction target is Bevy. Run GDAS-reader first. Score that ledger at least 3 before emitting.
App:App::new(), DefaultPlugins, then one plugin per ledger entry.
Components: none until the suggested skill adds them. A stub system takes no Query.
Resources: none by default. A score or config from a partial string stays out of the crate.
Systems:tick_<id> on Update. The body is empty.
unknown entries still get a plugin so COVERAGE.md matches the module tree.
What gets written
Path
Role
Cargo.toml
Package reconstructed, Bevy 0.20.
src/main.rs
DefaultPlugins plus feature plugins.
src/features/<id>.rs
Plugin and empty system. Comment names ledger id, status, evidence, and the Bevy skill to load.
placeholders/ or assets/
Placeholders when that entry's license is blank or unspecified. Copied bytes when --allow-assets and that entry's license are both set.
COVERAGE.md
Limits and one line per entry.
NEVER
NEVER add a Health component because a symbol was named apply_damage. That entry is a stub until bevy-combat-system is loaded and the behavior is confirmed.
NEVER copy asset bytes unless --allow-assets is set and that entry's license is not blank or unspecified. An unspecified license means the bytes are not yours to vendor.
NEVER decompile native code or WASM into Rust. A stub is not a disassembly. Invented Rust from those bytes fails the honesty rubric.
NEVER point this skill at a relative ../gdas-reader path. Install layouts have no sibling folder. Use the GitHub URL in Related Skills.
NEVER add Godot nodes, signals, or autoloads to the crate. Those types are not Bevy. Ownership stays a Plugin and an empty Update system until the suggested skill adds a Component.
Honesty rubric
Band
Rule
0
A system mutates gameplay state the ledger did not confirm.
1
Coverage drops an unknown id or omits limits.
2
Plugins exist but comments omit the Bevy skill.
3
Every entry is a plugin with an empty system and a coverage line.
4
bevy = "0.20" and DefaultPlugins. Assets are placeholders, or a licensed copy named from the module when --allow-assets was set.