Squashed from work; the fine-grained history is under tag archive/work-2026-08-29: - mp* wave: mpwm window manager + the mp app family, WM API, theme bridge, PDF engine fix - work: land the sources the last commits reference - kenney: catalogue all 50 free 3D kits; Modal dismissed() never fired - asset store: central vision-annotation queue; Kenney donate prompt - asset-ai: vision domain — image + prompt -> text on every fleet node - annotation runs the fleet's vision services through the normal job queue - vj: responsive DJ mixer + Windows drag-and-drop, cherry-picked from PR #1199 (vjroger) - store search: WordNet synonym expansion, query-side; per-term seeks - video scheduling: a cold model pin never downloads past a warm one, and a dedicated box only serves its role - an expansion can never lose a run — and `expand: true` finally means something - fleet panel: a slow box is not a missing box - h3: first+last keyframe conditioning (the weights were always FL2VA) - registry: the three H3 FL2VA tiers name their real conditioning - fleet scheduling: spread before stacking, and a stuck job moves - a download never steals a job from a box that has the weights - the faster GPU takes the tie: 6000 > 5090 > 4090 - an evicted flux model gives the card its VRAM back - a job now records what each of its stages was handed - open a stage in RUNS and read what it sent - every expanded song was an instrumental: the lyrics had nowhere to go - the writer never overwrites words the person wrote - store: a dependent job's body is spliced from its deps' results at claim - a fleet box's job row says what that job was asked for - the store runs a whole pipeline, and one record says how far it got - a client can declare a whole run, watch it, and stop it - 100% now means published, and the expander is a job you can queue - one card says what a spawned task is doing, everywhere - a run that ends says so, instead of being noticed later - when every box holding the model is busy, buy another copy
56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
mod common;
|
|
|
|
use makepad_asset_data::{
|
|
AssetDataError, AssetFile, AssetKind, DeviceTier, FileRole, MediaType,
|
|
};
|
|
|
|
fn model_program_manifest() -> makepad_asset_data::AssetManifest {
|
|
let mut manifest = common::weapon_manifest();
|
|
manifest.kind = AssetKind::ModelProgram;
|
|
manifest.capabilities.spawnable = false;
|
|
manifest.spawn_recipe = None;
|
|
manifest.files.push(AssetFile {
|
|
role: FileRole::Source,
|
|
tier: DeviceTier::Any,
|
|
lod: 0,
|
|
media: MediaType::Text,
|
|
blob: common::blob(8),
|
|
byte_len: 40,
|
|
dims: None,
|
|
});
|
|
manifest.metrics.total_bytes += 40;
|
|
manifest
|
|
}
|
|
|
|
#[test]
|
|
fn model_program_requires_text_source_and_keeps_legacy_manifest_encoding_valid() {
|
|
let manifest = model_program_manifest();
|
|
let bytes = manifest.to_canonical_bytes().expect("valid model-program");
|
|
let decoded = makepad_asset_data::AssetManifest::from_canonical_bytes(&bytes)
|
|
.expect("model-program round trip");
|
|
assert_eq!(decoded, manifest);
|
|
|
|
let mut missing = manifest.clone();
|
|
missing.files.retain(|file| file.role != FileRole::Source);
|
|
missing.metrics.total_bytes -= 40;
|
|
assert!(matches!(
|
|
missing.validate(),
|
|
Err(AssetDataError::Missing {
|
|
what: "model-program source role"
|
|
})
|
|
));
|
|
|
|
let mut wrong_media = manifest;
|
|
wrong_media
|
|
.files
|
|
.iter_mut()
|
|
.find(|file| file.role == FileRole::Source)
|
|
.unwrap()
|
|
.media = MediaType::Bin;
|
|
assert!(matches!(
|
|
wrong_media.validate(),
|
|
Err(AssetDataError::Missing {
|
|
what: "model-program source role"
|
|
})
|
|
));
|
|
}
|