Rename the project to FieldCraft

Crates fieldcraft-*, binaries fieldcraft and fieldcraft-cli, the .fieldcraft file (format tag
fieldcraft/1, manifest fieldcraft.json), FIELDCRAFT_* environment variables, the MCP server
name, egui widget ids (fc_*), the app icon document FieldCraft.icon and its generated family,
docs and licences. No compatibility shim: no files of the earlier name exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-13 23:51:40 -04:00
1 parent 9bc4e1b182
commit d5bd74570f
268 files changed
+1666 -1666

No files matched your search

+7 -7
View File
@@ -5,7 +5,7 @@
//! A case directory holds:
//! - `expected.json`: the case's kind (theory, experiment, benchmark), source, status and its
//! quantities: how each is measured, the reference value, the tolerance and the reason for it;
//! - `recipe.json`: the model as ModelCraft commands (a JSON array of `{"command", "params"}`,
//! - `recipe.json`: the model as FieldCraft commands (a JSON array of `{"command", "params"}`,
//! each step optionally with an `id` that measures can read its output by); absent while a
//! case is pending;
//! - `design.json` (optional): a SolidCraft script that builds the geometry, opened first;
@@ -21,7 +21,7 @@ use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::time::Instant;
use modelcraft_engine::Session;
use fieldcraft_engine::Session;
use serde_json::{Value, json};
/// Fixture band: a result may move by this fraction of its size (and a thousandth of the
@@ -232,8 +232,8 @@ pub fn run_case(dir: &Path, expected: &Expected) -> Result<Vec<Result<f64, Strin
let design = dir.join("design.json");
if design.is_file() {
let script = crate::corpus::read(&design).map_err(|e| e.to_string())?;
let bytes = modelcraft_geometry::script_design(&script).map_err(|e| format!("design.json: {e}"))?;
let opened = modelcraft_geometry::open_design(&bytes).map_err(|e| format!("design.json: {e}"))?;
let bytes = fieldcraft_geometry::script_design(&script).map_err(|e| format!("design.json: {e}"))?;
let opened = fieldcraft_geometry::open_design(&bytes).map_err(|e| format!("design.json: {e}"))?;
if let Some(e) = opened.errors.first() {
return Err(format!("design.json: feature {}: {}", e.feature, e.message));
}
@@ -402,7 +402,7 @@ pub fn run(root: &Path, options: &Options) -> Result<(), String> {
}
}
let text = serde_json::to_string_pretty(&json!({
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"note": "FieldCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"values": values,
}))
.map_err(|e| e.to_string())?;
@@ -565,7 +565,7 @@ pub fn report(cases: &[(String, Expected)], rows: &[Row]) -> String {
md,
"# Verification and validation oracle\n\n\
Generated by `cargo xtask oracle` from [`tests/oracle/`](../tests/oracle/); the policy is [verification.md](verification.md). \
Every case is our own model, built with ModelCraft commands from the problem's published description, and compared with \
Every case is our own model, built with FieldCraft commands from the problem's published description, and compared with \
the reference value its `expected.json` cites, within the stated tolerance and for the stated reason. Accepted results are \
frozen in each case's `fixture.json`: a later change that moves one beyond its band (10⁻⁹ of its size) fails CI even while \
the reference still passes. No reference value was produced with a commercial product.\n\n\
@@ -589,7 +589,7 @@ benchmark, {} experiment; {} pending cases wait for capabilities still being bui
};
let _ = write!(
md,
"## {heading}\n\n| Case | Quantity | Reference | ModelCraft | Error | Tolerance | Result | Fixture |\n|---|---|---|---|---|---|---|---|\n"
"## {heading}\n\n| Case | Quantity | Reference | FieldCraft | Error | Tolerance | Result | Fixture |\n|---|---|---|---|---|---|---|---|\n"
);
for (case, _) in &in_kind {
for r in rows.iter().filter(|r| &r.case == case) {