From 33d9b58ce81497a671285ea9835e208d74242b3c Mon Sep 17 00:00:00 2001 From: fy59 Date: Thu, 3 Sep 2026 07:12:47 +0200 Subject: [PATCH] feat: bind calibration solver producer identity --- docs/architecture/calibration_tooling.md | 3 ++ docs/roadmap/roadmap.md | 2 + prompt/02_CURRENT_FROZEN_STATE.md | 1 + prompt/12_CALIBRATION.md | 1 + tools/calibration_evidence_solver/README.md | 5 +- .../calibration_evidence_solver | Bin 168232 -> 172744 bytes .../calibration_evidence_solver.cpp | 46 ++++++++++++++++-- 7 files changed, 52 insertions(+), 6 deletions(-) diff --git a/docs/architecture/calibration_tooling.md b/docs/architecture/calibration_tooling.md index 7ffaf86..784c669 100644 --- a/docs/architecture/calibration_tooling.md +++ b/docs/architecture/calibration_tooling.md @@ -94,11 +94,14 @@ session.l3dcal session.l3dcal.bundle/detection.json session.l3dcal.bundle/solve.json session.l3dcal.bundle/evidence.json +session.l3dcal.bundle/producer.json ``` together with the exact selected execution and optical state, then construct the bounded `Lardon3DCalibrationToolingEvidence`. +`producer.json` binds the exact solver executable SHA-256, canonical solver-configuration SHA-256, exact session SHA-256, OpenCV build identity, CPU1 policy and optical-state SHA-256. + The coordinator must verify regular bounded files, immutable digests, session/bundle identity, categorical planarity PASS, selected-execution image binding and optical-state equality. It must never manufacture missing evidence. diff --git a/docs/roadmap/roadmap.md b/docs/roadmap/roadmap.md index 633d456..aa5df5b 100644 --- a/docs/roadmap/roadmap.md +++ b/docs/roadmap/roadmap.md @@ -521,6 +521,8 @@ deterministic synthetic CPU1 self-test is validated. The solver session contract now also requires explicit measured `white_border >= 30 mm` evidence. This closes the previous gap between the physical target requirement and the future coordinator input; no default border width is inferred. +`CALIBRATION_SOLVER_PRODUCER_IDENTITY_V1=PASS/FROZEN`: the solver bundle now includes deterministic `producer.json` evidence binding the exact solver executable, canonical solver configuration, session manifest, OpenCV build, CPU1 policy and optical-state SHA-256. + A bounded Tooling correction aligned planarity handling with Calibration Science v1: Science v1 defines a categorical physical planarity attestation, not a numeric flatness threshold. Tooling therefore rejects invented finite `target_flatness_mm` values. `L3DCALB1` v1 and Calibration diff --git a/prompt/02_CURRENT_FROZEN_STATE.md b/prompt/02_CURRENT_FROZEN_STATE.md index 643f61d..25fe320 100644 --- a/prompt/02_CURRENT_FROZEN_STATE.md +++ b/prompt/02_CURRENT_FROZEN_STATE.md @@ -28,6 +28,7 @@ External SSD controller VALIDATED Calibration Solver Preflight v1 PASS Calibration Evidence Solver v1 IMPLEMENTED/VALIDATED Calibration solver white-border evidence PASS/FROZEN +Calibration solver producer identity PASS/FROZEN Calibration Tooling planarity alignment PASS/FROZEN ``` diff --git a/prompt/12_CALIBRATION.md b/prompt/12_CALIBRATION.md index adaa302..fad0fb7 100644 --- a/prompt/12_CALIBRATION.md +++ b/prompt/12_CALIBRATION.md @@ -9,6 +9,7 @@ CALIBRATION_TOOLING_PLANARITY_ALIGNMENT=PASS/FROZEN CALIBRATION_BOOTSTRAP_V1=PASS/FROZEN CALIBRATION_EVIDENCE_SOLVER_V1=IMPLEMENTED/VALIDATED CALIBRATION_SOLVER_WHITE_BORDER_V1=PASS/FROZEN +CALIBRATION_SOLVER_PRODUCER_IDENTITY_V1=PASS/FROZEN CALIBRATION_WORKFLOW=IN_PROGRESS CURRENT_CALIBRATION_NEXT=WORKFLOW_COORDINATOR ``` diff --git a/tools/calibration_evidence_solver/README.md b/tools/calibration_evidence_solver/README.md index e01e68d..f78e687 100644 --- a/tools/calibration_evidence_solver/README.md +++ b/tools/calibration_evidence_solver/README.md @@ -57,7 +57,10 @@ d'orientation, dimensions et mesures de coordonnées plutôt que d'émettre le bit `0x08` par défaut. Sur réussite, le solveur crée de manière atomique `.bundle/`, qui est -immuable si déjà présent : `detection.json`, `solve.json` et `evidence.json`. +immuable si déjà présent : `detection.json`, `solve.json`, `evidence.json` et +`producer.json`. Ce dernier lie le SHA-256 du binaire solveur en cours, le +SHA-256 de sa configuration canonique, le SHA-256 exact du manifeste de +session, la version/build OpenCV, la politique CPU1 et le SHA de l’état optique. Les documents ont un ordre déterministe et encodent les valeurs faisant autorité comme chaînes `hexfloat` binary64. `solve.json` archive les trois sorties complètes (paramètres et poses); `evidence.json` archive les vecteurs diff --git a/tools/calibration_evidence_solver/calibration_evidence_solver b/tools/calibration_evidence_solver/calibration_evidence_solver index 9f53744674d299634965124a943b568f3927aa35..8dd35396784c8b8b52f436c6625c315edcbd5f89 100755 GIT binary patch delta 65627 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

rNJPymjg$N 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

x$jA~Xp>w=OsAmL<6ouaB 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 Y>|kRv*J=HO-&-I`n544qZ)& views, const Solve full[3], const Solve& fit, double rms, double maximum, size_t high, size_t count, double hold_rms, double hold_max, double delta, unsigned flags, - const std::array& optical, std::string* why) { + const std::array& optical, + const std::array& solver_executable_sha256, + const std::array& solver_configuration_sha256, + const std::array& session_sha256, + std::string* why) { const std::filesystem::path final = session + ".bundle"; const std::filesystem::path temp = session + ".bundle.tmp"; std::error_code ec; if(std::filesystem::exists(final,ec)||ec||std::filesystem::exists(temp,ec)){*why="evidence bundle already exists";return false;} @@ -273,6 +293,19 @@ bool write_bundle(const std::string& session, const SessionEvidence& e, const st std::ofstream f(temp/"evidence.json",std::ios::binary);if(!f)return fail("final evidence output"); f<<"{\n\"format\":\"L3DCAL_EVIDENCE_BUNDLE_V1\",\n\"target\":{\"id\":\""<(high)/static_cast(count))<<"\",\n\"holdout\":{\"rmse_px\":\""<&v,const Solve&s,double independent_rms, @@ -288,6 +321,9 @@ void report(const std::vector&v,const Solve&s,double independent_rms, } bool run_session(const std::string& session) { std::vector v;std::array optical{};SessionEvidence evidence;std::string why; + std::array solver_executable_sha256{},session_sha256{}; + if(!file_hash("/proc/self/exe",&solver_executable_sha256)||!file_hash(session,&session_sha256)){std::cerr<<"FAIL producer/session hash\\n";return false;} + const std::array solver_configuration_sha256=text_hash(solver_configuration_record()); if(!read_session(session,&v,&optical,&evidence,&why)||!detect(&v,&why)){std::cerr<<"FAIL "< all;cv::Size size;for(size_t i=0;ifit,hold;if(!validate_and_split(&v,&fit,&hold,&why)){std::cerr<<"FAIL "< optical{};std::string bundle_why; + Solve runs[3]={a,b,c};std::array optical{},solver_executable_sha256{},solver_configuration_sha256{},session_sha256{};solver_executable_sha256.fill(0xa1);solver_configuration_sha256.fill(0xa2);session_sha256.fill(0xa3);std::string bundle_why; const std::filesystem::path left=std::filesystem::temp_directory_path()/"l3dcal_byte_identity_left"; const std::filesystem::path right=std::filesystem::temp_directory_path()/"l3dcal_byte_identity_right";std::error_code ec;std::filesystem::remove_all(left.string()+".bundle",ec);std::filesystem::remove_all(right.string()+".bundle",ec); - const bool written=write_bundle(left.string(),evidence,v,runs,f,rr,rm,rh,rc,rr,rm,delta,0x0f,optical,&bundle_why)&&write_bundle(right.string(),evidence,v,runs,f,rr,rm,rh,rc,rr,rm,delta,0x0f,optical,&bundle_why); + const bool written=write_bundle(left.string(),evidence,v,runs,f,rr,rm,rh,rc,rr,rm,delta,0x0f,optical,solver_executable_sha256,solver_configuration_sha256,session_sha256,&bundle_why)&&write_bundle(right.string(),evidence,v,runs,f,rr,rm,rh,rc,rr,rm,delta,0x0f,optical,solver_executable_sha256,solver_configuration_sha256,session_sha256,&bundle_why); auto identical=[&](const char* name){std::ifstream x(left.string()+".bundle/"+name,std::ios::binary),y(right.string()+".bundle/"+name,std::ios::binary);std::ostringstream xs,ys;xs<