shibosoftwaredev/f1c100s-linux-nema17-stepper-controller
A four-layer NEMA 17 motor-controller PCB combining an Allwinner F1C100S Linux computer, USB‑PD/buck power system, W5500 Ethernet, STM32 real-time motion control, DRV8825 stepper driver, protection/temperature/current telemetry, USB interfaces, and local LED/buzzer diagnostics.
- Version
- 0.4.56
- License
- unset
- Stars
- 0
scripts/write-review-fix-status.mjs
import fs from "node:fs"
import crypto from "node:crypto"
import assert from "node:assert/strict"
const read=path=>JSON.parse(fs.readFileSync(path,"utf8"))
const bytes=fs.readFileSync("dist/index/circuit.json"),c=JSON.parse(bytes)
const sha=crypto.createHash("sha256").update(bytes).digest("hex")
const drill=read("reports/drill-clearance-regression.json")
const bom=read("reports/bom-validation.json")
const dfm=read("reports/additional-dfm-review.json")
const regression=read("reports/fix-regression.json")
const continuity=read("reports/connectivity-audit.json")
const stock=read("reports/jlcpcb-stock-audit.json")
for(const report of [drill,bom,dfm,regression,continuity,stock])assert.equal(report.circuitSha256,sha)
assert.equal(bom.findings.length,0);assert.equal(bom.populatedChecked,193)
assert.equal(dfm.findings.length,0);assert.equal(drill.regressionCount,0)
assert.equal(continuity.sourceFailures,0);assert.equal(continuity.disconnectedTerminalIslands,0)
assert.equal(read("reports/coil-all-copper-preflight.json").length,0)
const kelvin=read("reports/coil-session-kelvin.json")
assert.equal(kelvin.length,4)
assert.ok(kelvin.every(test=>test.connected&&test.joinsOnlyAtShuntLand))
const errors=c.filter(e=>e.type.endsWith("_error")),warnings=c.filter(e=>e.type.endsWith("_warning"))
assert.equal(errors.length,0)
const outcomes={
"ethernet-termination-bom":{status:"fixed locally",detail:"Four 49.9 ohm 0402 terminations now select C87044, not 47 kohm parts."},
"current-reference-bom":{status:"fixed locally",detail:"9.1 kohm reference now selects C163450; intended 0.396 A nominal setting restored."},
"ethernet-ac-capacitor-bom":{status:"fixed locally",detail:"Both coupling capacitors select 6.8 nF / 50 V / 0402 C2760541."},
"motor-transient-rating":{status:"part selection fixed; qualification open",detail:"22 uF/50 V CA55-D050M226TE100 C41417029 fits the unchanged D-case pads. Rating derates above 85 C; verify local temperature, ripple and actual transient response."},
"via-drill-clearance":{status:"partially fixed",detail:`202 findings reduced to ${drill.currentFindings}, at three remaining SoC/PD-status locations. None waived; no new findings.`},
"manufacturing-gate-and-stale-output":{status:"gates fixed; current handoff blocked",detail:"BOM, independent drill/pad/PTH/legend gates fail closed. Export stages separately and preserves/restores previous handoffs. The 183-part fabrication audit is historical; no current 193-part fabrication directory has been exported."},
"additional-pad-dfm":{status:"fixed locally",detail:"PE7/PE5 moved 0.06 mm; both exposed pad gaps meet 0.15 mm. No additional pad/PTH findings in the stated scope."},
"minor-pullup-and-release-text":{status:"fixed in local source; publication unchanged",detail:"PD pull-up reconciled to actual 51 kohm; local documentation distinguishes pre-fix published data from current edits."},
"test-and-warning-coverage":{status:"improved; unresolved",detail:`${warnings.length} native warnings versus 187 pre-fix. Six catalog tests and two export-promotion tests pass. The 26 baseline module-profile failures remain, not skipped or treated as passing.`},
}
const historical=read("reports/full-board-review.json")
const report={checkedAt:new Date().toISOString(),circuitSha256:sha,
verdict:"Regression-checked development improvement, NOT fabrication-ready",fabricationReady:false,
publicationRecord:"reports/review-fix-publication.json",
checkpointDirectory:"../../checkpoints/nema17-review-fixes-20261019-3wRAM9",
acceptedStages:[1,2,3,4,6,7,9,10],
rejected:[{stage:5,reason:"PE6 move collided with SPI clock; replaced by PE7/PE5 separation"},
{stage:8,reason:"No legal extra drill/stub candidate; not installed"},
{stage:11,reason:"Q_VBUS move produced UART0_TX pad gap and R_PD_VSET courtyard overlap; restored"},
{stage:12,reason:"Outward SoC escape search found no fully checked local replacement; not installed"}],
native:{errors:errors.length,warnings:warnings.length},
catalog:{populatedChecked:bom.populatedChecked,uniqueCodes:stock.uniquePartCount,
findings:bom.findings.length,inventoryCheckedAt:stock.checkedAt,reserved:false},
drill:{before:202,after:drill.currentFindings,added:drill.regressionCount,remaining:drill.findings},
additionalDfm:{findings:dfm.findings.length,smallSilkscreen:dfm.silkscreenBelowPublished1mmHeight,scope:dfm.caveat},
preserved:regression,
review:historical.findings.map(f=>({id:f.id,title:f.title,
...outcomes[f.id]??{status:"open",detail:f.action}})),
passEvidence:["reports/fix-accepted-build.log","reports/fix-accepted-shorts.log",
"reports/fix-accepted-continuity.log","reports/fix-accepted-copper.log","reports/fix-accepted-kelvin.log",
"reports/fix-accepted-typecheck.log","reports/fix-accepted-bom-tests.log","reports/fix-accepted-export-tests.log",
"reports/fix-firmware-tests.log","reports/fix-python-tests.log","reports/export-gate-test.json"],
limitations:["No hardware test, complete Linux image, actual rear screw/adapter harness fit or complete manufacturing CAM signoff",
"Ethernet pairing/stackup/return paths, current analog exposure and silkscreen remain open",
"Native/CLI checks do not replace fresh cloud AI schematic analysis or production review"]}
fs.writeFileSync("reports/review-fix-status.json",JSON.stringify(report,null,2)+"\n")
console.log(JSON.stringify({circuitSha256:sha,verdict:report.verdict,native:report.native,
drill:report.drill.after,bomFindings:report.catalog.findings,additionalDfm:report.additionalDfm.findings}))