Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
643 commits
Select commit Hold shift + click to select a range
d74a583
refactor(studio): remove redundant zero-VLAN validation clause
masarray Oct 22, 2026
b099d26
test(ptp): assert priority-tagged VLAN0 PCP4 on actual PTP Announce b…
masarray Oct 22, 2026
9530f07
test(ptp): run PTP VLAN0 PCP4 wire regression
masarray Oct 22, 2026
8db8a70
ci(ptp): enforce VLAN0 PCP4 tagging in matched ESP32-P4 preview firmware
masarray Oct 22, 2026
43e0a65
fix(test): avoid implicit 32-to-16-bit narrowing in MSVC PTP VLAN vec…
masarray Oct 22, 2026
ec54321
fix(test): avoid MSVC optional narrowing when asserting VID0 decoded …
masarray Oct 22, 2026
f6c2505
feat(studio): declare canonical SV VLAN override for each SCL stream
masarray Oct 22, 2026
4ce1001
feat(studio): per-stream VLAN editing survives SCL recompilation and …
masarray Oct 22, 2026
8897bef
feat(studio): edit SV Ethernet VLAN PCP/VID per SCL stream and requir…
masarray Oct 22, 2026
4f19e63
feat(studio): expose canonical SV profile to PTP Expert
masarray Oct 22, 2026
f8343fa
feat(studio): independently set PTP VLAN or explicitly match SV VLAN …
masarray Oct 22, 2026
f9c6692
fix(studio): verify SV VLAN on canonical binary device profile before…
masarray Oct 22, 2026
abf80d3
feat(ptp): typed isolated bench GM epoch and quality profile configur…
masarray Oct 22, 2026
11b846a
feat(esp32p4): isolated GNSS-like bench GM wire qualities gated on EM…
masarray Oct 22, 2026
c7e9e4f
feat(ptp): monotonic compensated Studio UTC seed for emulated PTP/TAI…
masarray Oct 22, 2026
6fc757c
feat(firmware): transactional PTP CONFIG accepts explicit bench GM mo…
masarray Oct 22, 2026
2000194
feat(sv): promote smpSynch 2 only with measured SV MAC lock and fresh…
masarray Oct 22, 2026
9582291
feat(firmware): expose bench GM mode capability to native Studio
masarray Oct 22, 2026
2f5ac67
feat(studio): explicit PTP Grandmaster simulation option for relay in…
masarray Oct 22, 2026
cb92851
feat(studio): send fresh UTC-epoch BENCH GM PTP CONFIG to supporting …
masarray Oct 22, 2026
c267260
feat(sv): model optional IEC 61850 Ed2.1 gmIdentity synchronization s…
masarray Oct 22, 2026
791636b
feat(sv): encode/decode standard context tag 0x89 eight-byte PTP gmId…
masarray Oct 22, 2026
3371f19
feat(esp32p4): include matching PTP GrandmasterIdentity in SV Ed2.1 b…
masarray Oct 22, 2026
dcb0402
test(sv): Ed2.1 gmIdentity wire tag 0x89, roundtrip and malformed length
masarray Oct 22, 2026
6baa66c
test(studio): native canonical SV VLAN edit, binary profile, invalid …
masarray Oct 22, 2026
63ea71e
fix(esp32): include portable PTP EUI-64 clock identity helper header
masarray Oct 22, 2026
ce79ef0
fix(test): initialize optional gmIdentity in existing strict aggregat…
masarray Oct 22, 2026
530d531
fix(studio): reload VLAN editor on active SCL stream change; avoid cr…
masarray Oct 22, 2026
a1cf936
fix(ptp): validate UTC seed freshness at source START, not role handoff
masarray Oct 22, 2026
95e8c76
test(ptp): GNSS-profile simulator Announce wire flags, class, accurac…
masarray Oct 22, 2026
d56f0f6
fix(studio): include span for native VLAN binary regression
masarray Oct 22, 2026
94b8c14
fix(studio): gate advanced BENCH GM configuration on verified compati…
masarray Oct 22, 2026
60165e6
fix(sv): preserve aggregate source compatibility by appending gmIdent…
masarray Oct 22, 2026
3f4cb20
fix(ptp): preserve millisecond UTC epoch fraction in bench Grandmaste…
masarray Oct 22, 2026
f4e4eb4
fix(esp32): accept host milliseconds in PTP CONFIG and preserve legac…
masarray Oct 22, 2026
854c69e
fix(ptp): hardware EMAC TAI seeding retains sub-second host epoch and…
masarray Oct 22, 2026
62c92c7
fix(studio): send millisecond UTC seed to simulated Grandmaster inste…
masarray Oct 22, 2026
bbe830a
fix(sv): tolerate transient 2.5s host UART stalls, preserve bounded l…
masarray Oct 22, 2026
3c99e06
feat(sv): expose maximum heartbeat gap and slow heartbeat events in l…
masarray Oct 22, 2026
fd7aeae
feat(sv): fast SOURCE-only AUTO lock after real phase and MAC evidenc…
masarray Oct 22, 2026
47738d3
fix(esp32): SOURCE AUTO uses measured self-clock fast acquisition, ex…
masarray Oct 22, 2026
79e2224
test(sv): self-GM AUTO lock at second live measured phase/MAC epoch a…
masarray Oct 22, 2026
d34e909
feat(sv): expose SOURCE_FAST acquisition progress and clear gate on p…
masarray Oct 22, 2026
1846fd0
ci(studio): rebuild matched Windows installer on firmware-only PTP/SV…
masarray Oct 22, 2026
3994f78
feat(sv): encode SCL-specific Ed2.1 smpRate/smpMod semantics on 4I4V …
masarray Oct 22, 2026
17a4fec
feat(studio): preview exact SCL wire metadata without modifying legac…
masarray Oct 22, 2026
3ca1ff9
test(studio): accept measured SOURCE_FAST telemetry while retaining c…
masarray Oct 22, 2026
fa80cef
ci(studio): publish direct SHA-pinned PTP/SV bench Inno EXE only afte…
masarray Oct 22, 2026
88575b8
feat(ptp-ui): separate local GM TX, measured SV phase and unverified …
masarray Oct 22, 2026
78d0368
feat(ptp): add fail-closed operator source-selection and GM handoff s…
masarray Oct 22, 2026
fecefbd
fix(ptp-policy): rearm recovered external GM under external authority…
masarray Oct 22, 2026
be7e717
docs(integration): inventory all 64 PR heads and 26 issues with fail-…
masarray Oct 22, 2026
a553e04
docs(integration): flag missing side-branch files and strict semantic…
masarray Oct 22, 2026
f31eac0
docs(integration): freeze machine-readable 64 PR and 26 issue source …
masarray Oct 22, 2026
3dff7a1
docs(integration): verify original atomic 4I4V side-branch file blob …
masarray Oct 22, 2026
521979e
docs(integration): retain evidence of competing Qt layouts PTP and li…
masarray Oct 22, 2026
2191fd5
docs(integration): inspect remaining UX PTP and operator baseline sid…
masarray Oct 22, 2026
e6c489c
tools(integration): add read-only offline PR commit ancestry and file…
masarray Oct 22, 2026
0a2600f
docs(integration): retain full Workbench reporting and PTP historical…
masarray Oct 22, 2026
c5c8256
docs(integration): pin Browser, Simulator UX, Studio shutdown, and hi…
masarray Oct 22, 2026
50dc219
docs(integration): retain IED Simulator and START timing release-bloc…
masarray Oct 22, 2026
d0e3b0a
tools(integration): require complete 16-PR independent source coverag…
masarray Oct 22, 2026
6a3bb5c
ci(integration): enforce pinned PR preservation inventory on lightwei…
masarray Oct 22, 2026
b641af7
docs(integration): permanent engineering start-here handoff with base…
masarray Oct 22, 2026
d8e96fc
fix(integration): preserve exact legacy source path using lossless JS…
masarray Oct 22, 2026
0f75394
fix(integration): align historical handoff display with product namin…
masarray Oct 22, 2026
52dccf8
docs(integration): audit exact divergence of all 37 out-of-chain PRs …
masarray Oct 22, 2026
b565be8
docs(integration): cross-link exact 37-PR divergence triage for futur…
masarray Oct 22, 2026
1331754
docs(integration): pinpoint #251 transaction hash and generation-race…
masarray Oct 22, 2026
4987747
fix(sv): reject stale staged 4I4V scenario before live generation ove…
masarray Oct 22, 2026
b6c13a5
fix(sv): restore concurrency-safe 4I4V bank snapshots from #248
masarray Oct 22, 2026
23a99ca
docs(integration): one-page safe-merge handoff, green exact-code CI a…
masarray Oct 22, 2026
fcffcb9
feat(sv): atomic 4I4V CFG commit while RUNNING with no START authority
masarray Oct 22, 2026
6c1ab72
feat(studio): verified atomic live 4I4V CFG with no spurious STOP or …
masarray Oct 22, 2026
8b0eee9
feat(studio): expose explicit verified live 4I4V apply control
masarray Oct 22, 2026
73cbf83
fix(studio): forbid legacy partial live commands while running; requi…
masarray Oct 22, 2026
dde8ed9
fix(studio): prevent partial per-channel ENABLE while 4I4V streaming
masarray Oct 22, 2026
27e7ca8
test(studio): live 4I4V ACK/readback no restart and failure preserves…
masarray Oct 22, 2026
a2ed8c9
fix(studio): report new frequency only after verified live commit or …
masarray Oct 22, 2026
3eac7da
fix(studio): store staged frequency until authoritative ACK and readback
masarray Oct 22, 2026
9d0d7cc
test(studio): enforce live 4I4V transaction, ACK provenance and legac…
masarray Oct 22, 2026
1de2bba
fix(ci): resolve correct project_root for Studio live CFG structural …
masarray Oct 22, 2026
b4a11c6
fix(ci): repair malformed native Inno prerelease YAML, pin direct EXE…
masarray Oct 22, 2026
011ff12
docs(integration): update all handoffs to live-4I4V code-present, acc…
masarray Oct 22, 2026
25c1a65
test(studio): update stale partial-SET assertion for atomic 4I4V live…
masarray Oct 22, 2026
a59b11b
fix(studio): persist START/STOP and heartbeat forensic logs; expose r…
masarray Oct 22, 2026
84f013c
fix(ci): restore proven native preview pipeline; build draft PR test …
masarray Oct 22, 2026
1debf64
fix(ci): permit exact-head Studio preview firmware on draft without e…
masarray Oct 22, 2026
7c7032e
fix(ci): narrowly allow draft integration #286 matched firmware previ…
masarray Oct 22, 2026
fafbab9
fix(studio): START/STOP control tracks board RUNNING, not transient s…
masarray Oct 22, 2026
1fb03d7
fix(studio): open diagnostic folder using QtCore QProcess, preserve Q…
masarray Oct 22, 2026
3737666
fix(ptp-sv): keep internal GM sync through measured 2-3us clock-read …
masarray Oct 22, 2026
67569a3
fix(esp32p4): apply source-only phase margin to on-board AUTO smpSync…
masarray Oct 22, 2026
af4ea86
test(ptp-sv): regress physical 0-2-0 SOURCE flapping at 5-6us uncerta…
masarray Oct 22, 2026
09d9d2f
ci(ptp-sv): run real SOURCE no-flap regression before exact-head firm…
masarray Oct 22, 2026
7994eff
ci(ptp-sv): keep preview native regression compile command unambiguous
masarray Oct 22, 2026
b0e80ad
ci(ptp-sv): run host regression from repository root in embedded work…
masarray Oct 22, 2026
62a6b60
fix(capture): declare active-SV gate and durable empty-capture failur…
masarray Oct 22, 2026
3711d8f
fix(capture): reject capture when SV publisher STOPPED and persist fa…
masarray Oct 22, 2026
28fd561
fix(capture): reject mid-stream STOP and diagnose empty/aborted PCAP …
masarray Oct 22, 2026
0e6c860
fix(studio): disable SV capture and explain STOPPED publisher before …
masarray Oct 22, 2026
3c8b76d
test(capture): regress STOPPED+stale-FPS rejection and exact 24-byte …
masarray Oct 22, 2026
ba248ae
fix(studio): include QJsonObject explicitly for Windows MSVC capture …
masarray Oct 22, 2026
3994267
fix(studio): label stopped-publisher FPS as stale, not live sample rate
masarray Oct 22, 2026
00c27ec
ci(capture): build and execute real production PCAP decoder liveness/…
masarray Oct 22, 2026
7c95f70
fix(studio): reject empty SV capture while board is stopped
masarray Oct 22, 2026
fa60294
fix(studio): port tested auto-live editor behavior onto PCAP-proven f…
masarray Oct 23, 2026
b60d7f5
fix(studio): port tested auto-live editor behavior onto PCAP-proven f…
masarray Oct 23, 2026
8042c98
test(studio): verify AutoLive focus/Enter without altering physical S…
masarray Oct 23, 2026
b32f846
ci(recovery): permit exact paired firmware preview on Draft recovery …
masarray Oct 23, 2026
90e2755
ci(policy): explicitly verify narrow Draft #288 firmware recovery exc…
masarray Oct 23, 2026
f2fc8a5
fix(studio): carry invalid capture reason through physical PCAP decoder
masarray Oct 23, 2026
84b3ea7
fix(studio): export 5 forensic outputs even after mid-capture SV STOP…
masarray Oct 23, 2026
8a24285
test(studio): interrupted capture must preserve real SV/PTP counts an…
masarray Oct 23, 2026
e820407
checkpoint: verified-source SV/PTP + automatic live setpoints and par…
masarray Oct 23, 2026
163dbdf
feat(m3a): pure fail-closed policy for parking running SV sample grid
masarray Oct 23, 2026
278ffe3
feat(m3a): park 4kHz sample grid and retain PTP phase on SV STOP, reu…
masarray Oct 23, 2026
12358bd
test(m3a): 100 STOP/START dry-grid park cycles and fail-closed lease/…
masarray Oct 23, 2026
f0e4e0f
ci(m3a): allow one exact-head Draft firmware build for persistent-gri…
masarray Oct 23, 2026
b757a3d
ci(m3a): scoped GCC/Clang portable timing tests on M3.A Draft only
masarray Oct 23, 2026
51f197a
ci(policy): bound M3.A Draft portable and ESP32 build exceptions to e…
masarray Oct 23, 2026
aaa9819
fix(m3a): avoid timer rearm when rapid STOP→START overtakes idle park…
masarray Oct 23, 2026
58865f9
test(m3a): exercise fast STOP→START hot-grid reuse in 100-cycle policy
masarray Oct 23, 2026
6c0b823
ci(m3a): enable exact-head paired Windows+firmware artifact for Draft…
masarray Oct 23, 2026
71c134d
ci(policy): verify M3.A standalone and paired-preview Draft permissions
masarray Oct 23, 2026
7fbd46e
feat(m3b): pure bounded, explicit boot PTP SOURCE admission policy
masarray Oct 23, 2026
2b012d2
test(m3b): boot-source gating, manual override, retries, and monotoni…
masarray Oct 23, 2026
c3e040d
feat(m3b): declare manual PTP precedence over boot timebase startup
masarray Oct 23, 2026
65b19ea
feat(m3b): atomic operator-override latch prevents background PTP SOU…
masarray Oct 23, 2026
bb09c8f
feat(m3b): manual PTP START/STOP/CONFIG dominates boot supervisor
masarray Oct 23, 2026
e37493d
feat(m3b): guarded opt-in isolated bench boot PTP source policy
masarray Oct 23, 2026
e55d4d4
feat(m3b): enable explicitly lab-scoped boot clock supervisor in inje…
masarray Oct 23, 2026
2c43249
feat(m3b): boot SOURCE supervisor with PHY readiness, bounded retries…
masarray Oct 23, 2026
c543c99
fix(m3b): explicit PTP START cannot reset an already-ready boot EMAC …
masarray Oct 23, 2026
fab7f6a
fix(m3b): Studio shutdown stops SV only, preserves ESP32 always-on PT…
masarray Oct 23, 2026
c2fda00
test(m3b): Studio exit must stop SV without issuing PTP STOP
masarray Oct 23, 2026
32b6cf3
refactor(m3b): keep low-rate boot clock observer after operator role …
masarray Oct 23, 2026
3da865a
ci(m3b): matched-source firmware preview for isolated Draft M3.B
masarray Oct 23, 2026
4075592
ci(m3b): run exact-head GCC/Clang boot-timebase regressions on Draft
masarray Oct 23, 2026
3d766e9
ci(policy): verify exact M3.B Draft heavy-build allowlist without wid…
masarray Oct 23, 2026
da83457
feat(m3b): explicit link-loss recovery gate, never SV STOP driven
masarray Oct 23, 2026
567c8ff
feat(m3b): bounded physical link recovery, preserve authority on SV STOP
masarray Oct 23, 2026
697eda8
test(m3b): PHY recovery cannot confuse operator SV STOP with GM restart
masarray Oct 23, 2026
8e31a73
fix(m3b): expire link-loss restart permission when original PTP SOURC…
masarray Oct 23, 2026
f3b6fdf
ci(m3b): fail paired firmware packaging if boot SOURCE autostart was …
masarray Oct 23, 2026
2d255d2
feat(m3c): pure deterministic foreign Announce quality/hysteresis and…
masarray Oct 23, 2026
f00a31a
feat(m3c): parse foreign GM Announce in existing SOURCE Pdelay RX pat…
masarray Oct 23, 2026
a6cda24
feat(m3c): explicit lab-only external-GM handover and quiet-time loca…
masarray Oct 23, 2026
25bdf89
feat(m3c): bench-only AUTO external preferred and quiet-local fallbac…
masarray Oct 23, 2026
e068440
feat(m3c): expose only a read-only stable external Announce candidate…
masarray Oct 23, 2026
0ff96b5
feat(m3c): safe background SOURCE->RECEIVER handover and opt-in 15s q…
masarray Oct 23, 2026
934c055
test(m3c): foreign ranking, anti-burst hysteresis, GM stale, exclusiv…
masarray Oct 23, 2026
c2cdeac
ci(m3c): strict exact-head external-GM FSM regression and matched fir…
masarray Oct 23, 2026
7ebea91
ci(m3c): strict exact-head external-GM FSM regression and matched fir…
masarray Oct 23, 2026
ba42883
ci(policy): enforce narrow M3.C Draft exceptions and protect all othe…
masarray Oct 23, 2026
6a08805
fix(m3c): candidate Announce must match configured VLAN PCP as well a…
masarray Oct 23, 2026
796e53b
fix(m3c): anti-flapping 30s handover cooldown, recheck SV STOP before…
masarray Oct 23, 2026
c34cf8b
refactor(m3c): fixed 4-source Announce tracker with per-port hysteres…
masarray Oct 23, 2026
66654f1
fix(m3c): associate Announce hysteresis with exact foreign PTP source…
masarray Oct 23, 2026
b31b84e
test(m3c): two interleaved external GMs cannot starve each other's ad…
masarray Oct 23, 2026
2b14736
refactor(m3c): shared strict PTP domain/transport/VLAN PCP wire admis…
masarray Oct 23, 2026
f424f43
refactor(m3c): use shared audited L2 foreign-PTP profile matcher
masarray Oct 23, 2026
dd4e8db
test(m3c): parse real encoded PTP Announce and reject mismatched doma…
masarray Oct 23, 2026
dd3e2b9
fix(test): parenthesize aggregate initializers in CHECK macro test st…
masarray Oct 23, 2026
c31de5b
refactor(m3c): pure wrap-safe 30s anti-flapping handover dwell policy
masarray Oct 23, 2026
c3b56b6
refactor(m3c): use testable policy dwell and avoid raw serial clock o…
masarray Oct 23, 2026
249de26
test(m3c): bound 30s anti-flap dwell across uint32 uptime rollover
masarray Oct 23, 2026
33db85b
feat(m3d): typed fail-closed four-mode operator time source policy
masarray Oct 23, 2026
b9adb6e
feat(m3d): firmware ABI for checked runtime PTP policy and mode readback
masarray Oct 23, 2026
a3b6c20
feat(m3d): atomic four-mode PTP policy transaction with single EMAC o…
masarray Oct 23, 2026
28a5a6d
feat(m3d): verified serial PTP POLICY command, safe rejection, and li…
masarray Oct 23, 2026
f65c518
feat(m3d): background timebase supervisor follows selected four-mode …
masarray Oct 23, 2026
a22c9fa
fix(m3d): source policy never reuses an old bench-GNSS epoch claim
masarray Oct 23, 2026
305c4f8
feat(m3d): strongly typed Studio properties for board PTP policy/stat…
masarray Oct 23, 2026
8818154
feat(m3d): expose guided advanced time-source selection to QML
masarray Oct 23, 2026
4b7e3a4
feat(m3d): session gate denies PTP mode mutation during SV/clock/firm…
masarray Oct 23, 2026
6fe5398
feat(m3d): validate policy command and parse actual ESP32 PTPPOLICY r…
masarray Oct 23, 2026
db0b716
feat(m3d): board capability handshake identifies real policy control …
masarray Oct 23, 2026
89971f2
feat(m3d): advanced PTP policy selector with verified board state and…
masarray Oct 23, 2026
822f369
test(m3d): pure four-mode policy matrix rejects unsafe GM promotion a…
masarray Oct 23, 2026
4a45ab6
feat(m3d): generation fence for boot supervisor policy changes
masarray Oct 23, 2026
7157f13
fix(m3d): generation-tag policy updates prevent stale ready_once latc…
masarray Oct 23, 2026
cf3c46e
fix(m3d): retarget dry-grid supervisor once per verified stopped poli…
masarray Oct 23, 2026
915f9e9
ci(m3d): restrict portable PTP and ESP firmware Draft builds to exact…
masarray Oct 23, 2026
f0ce256
ci(m3d): restrict portable PTP and ESP firmware Draft builds to exact…
masarray Oct 23, 2026
8a5562b
ci(policy): prove scoped M3.D Draft firmware/PTP exceptions do not wi…
masarray Oct 23, 2026
9a3ceac
test(m3d): structural end-to-end firmware policy handshake and Studio…
masarray Oct 23, 2026
da0f0b5
fix(m3d): enforce SV TX STOP in the firmware EMAC-policy transaction …
masarray Oct 23, 2026
3a33575
fix(m3d): surface actual firmware policy rejects and force board read…
masarray Oct 23, 2026
27e7444
fix(ptp): preserve fresh bench GM source epoch on mode change
masarray Oct 23, 2026
c8cddb6
fix(ptp): preserve fresh bench GM source epoch on mode change
masarray Oct 23, 2026
cceb4b7
fix(ptp): preserve fresh bench GM source epoch on mode change
masarray Oct 23, 2026
25b97c0
fix(ptp): preserve fresh bench GM source epoch on mode change
masarray Oct 23, 2026
d236499
test(studio): guard against silent bench GM downgrade on PTP policy
masarray Oct 23, 2026
fe2d93d
fix(ptp): boot isolated simulated Global GM; preserve it across polic…
masarray Oct 23, 2026
6093016
fix(sv): preserve previously certified SOURCE sync across warm STOP/S…
masarray Oct 23, 2026
3f4e9ee
test(ptp): regress 100 warm resume cycles, phase fault revocation and…
masarray Oct 23, 2026
c3a7436
fix(studio): avoid unbound combo theme QML TypeError on early render
masarray Oct 23, 2026
a0a2a43
fix(build): keep warm clock phase token valid when descriptor probes …
masarray Oct 23, 2026
fc679dd
fix(sv): retain certified PTP sample-clock authority across SV-only S…
masarray Oct 23, 2026
f5a291e
test(sv): 100 stop/start cycles preserve clock proof and reject false…
masarray Oct 23, 2026
29a3630
test(studio): guard clock certification against SV-only STOP regressions
masarray Oct 23, 2026
3ee4e25
fix(ptp): source generation tracks actual EMAC timebase starts, not t…
masarray Oct 23, 2026
c917739
test(ptp): prohibit fake GM generation changes on readiness reacquisi…
masarray Oct 23, 2026
fab12b3
fix(m3e): keep sample phase observer on owned GPTimer during asynchro…
masarray Oct 24, 2026
2d27ea1
feat(timebase): pure continuous GPTimer ownership policy independent …
masarray Oct 24, 2026
26070b4
test(sv): 100 STOP/PARK/START flag races cannot invalidate continuous…
masarray Oct 24, 2026
c192b7b
test(studio): prohibit transient STOP/PARK flags revoking PTP phase c…
masarray Oct 24, 2026
2a2931d
feat(sv): qualify active transmission from physical ISR publication gate
masarray Oct 24, 2026
3283b26
fix(sv): do not requalify live MAC before PTP-second ISR actually ena…
masarray Oct 24, 2026
bbdf30e
test(sv): no premature MAC evidence loss before actual PTP boundary l…
masarray Oct 24, 2026
ffc2668
test(studio): forbid premature live MAC admission before real ISR PTP…
masarray Oct 24, 2026
c599be1
ci(fat): compile-time gate for simulated Global GM, PTP boot and meas…
masarray Oct 24, 2026
4412e19
ci(studio): refuse matched Windows installer unless ESP32 firmware bo…
masarray Oct 24, 2026
a14dea1
fix(ptp): default to INTERNAL_GM_ONLY; compiled external GM capabilit…
masarray Oct 24, 2026
01b49ce
test(ptp): block implicit AUTO external-GM handover in internal SOURC…
masarray Oct 24, 2026
455be59
ci(fat): make implicit AUTO GM handover a release-blocker, record INT…
masarray Oct 24, 2026
52ee5d7
ci(windows): installer rejects implicit external-GM AUTO defaults; re…
masarray Oct 24, 2026
34b2614
test(studio): update preflight guard to verified continuously owned G…
masarray Oct 24, 2026
05fa8a1
feat(studio): bounded verified USB presence-loss gate independent of …
masarray Oct 24, 2026
d4a04dd
fix(studio): automatically retire stale COM on confirmed USB disappea…
masarray Oct 24, 2026
20f6ea6
feat(studio): pure USB-arrival gate and cached presence inventory for…
masarray Oct 24, 2026
6d007c2
fix(studio): re-identify on physical USB reappearance without restart…
masarray Oct 24, 2026
e51721a
test(studio): USB disappearance hysteresis, COM renumber arrival and …
masarray Oct 24, 2026
a9cc532
test(studio): enforce USB-only hotplug recovery without PTP/SV side e…
masarray Oct 24, 2026
f29e042
test(studio): verify actual PTP/SV command calls, not harmless explan…
masarray Oct 24, 2026
ac62f04
fix(studio): single serial loss authority; hysteresis owned by worker…
masarray Oct 24, 2026
11fefec
feat(studio): serial worker reports unexpected COM loss after release…
masarray Oct 24, 2026
d51782b
fix(studio): trigger reconnect only after verified zombie COM is clos…
masarray Oct 24, 2026
1184fc1
feat(studio): forward worker unexpected COM loss to discovery supervi…
masarray Oct 24, 2026
1195af1
fix(studio): forward post-close USB loss and retire stalled verified …
masarray Oct 24, 2026
ebfcb73
fix(studio): immediately rediscover after closed failed COM, includin…
masarray Oct 24, 2026
a8ca252
test(studio): enforce single USB loss owner and event-driven post-clo…
masarray Oct 24, 2026
a404b77
feat(ptp): explicit finite evidence continuity for active SOURCE with…
masarray Oct 24, 2026
21c9541
fix(ptp): retain last verified 1Hz PTP TX evidence across isolated bu…
masarray Oct 24, 2026
36dc9b0
test(ptp): positive PTP evidence withstands 1Hz transport glitches, e…
masarray Oct 24, 2026
fd6247e
test(ptp): 100 live 1Hz epochs maintain measured SOURCE lease across …
masarray Oct 24, 2026
604ac5b
test(studio): enforce bounded PTP SOURCE evidence continuity from reg…
masarray Oct 24, 2026
3f4d4c7
feat(studio): focus reconnect identity scan on credible USB/verified …
masarray Oct 24, 2026
b1d84a6
fix(studio): stop chasing unrelated Bluetooth/legacy COM ports on ver…
masarray Oct 24, 2026
6e2d541
test(studio): COM15 hotplug selects credible USB without multi-COM 5.…
masarray Oct 24, 2026
b200b25
test(studio): prevent slow multi-COM discovery regressions during hot…
masarray Oct 24, 2026
a922e9b
test(studio): enforce narrowed USB discovery and preserved verified C…
masarray Oct 24, 2026
3d07c66
docs(release): publish evidence-led M3.H process-bus simulator scope …
masarray Oct 24, 2026
7018d8a
ci(release): publish checksum-pinned M3.H process-bus simulator binar…
masarray Oct 24, 2026
736cc0b
fix(release): idempotent verified asset upload when GitHub UI creates…
masarray Oct 24, 2026
fc39cd5
docs(studio): link public M3.H laboratory SV/PTP process-bus simulato…
masarray Oct 24, 2026
a4b6e53
ci(release): permit release README link as documentation-only tagged …
masarray Oct 24, 2026
7b8c72e
Merge verified M3.H Process Bus SV/PTP source into main history
github-actions[bot] Oct 24, 2026
c90a979
Merge M3.H public release tag provenance; retain newer Stable docs an…
masarray Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 29 additions & 4 deletions .github/workflows/arstack-studio-native-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- 'apps/arstack_studio/**'
# Firmware-only timing fixes MUST create a matched ESP32 image and
# Windows Inno installer; do not leave users on stale embedded firmware.
- 'embedded/esp32p4_smv_injector/**'
- 'include/ariec61850/time_sync/**'
- '.github/workflows/arstack-studio-native-preview.yml'

permissions:
Expand All @@ -19,10 +23,14 @@ jobs:
# rather than taking an older public firmware that lacks PROFILE-BINARY-V1.
firmware:
uses: ./.github/workflows/esp32p4-smv-injector.yml
with:
# Only the GUI Preview installer opts into measured local phase sync.
# Stable release workflow keeps ordinary firmware until board validation.
phase_sync_preview: true

windows-preview:
needs: firmware
if: ${{ !github.event.pull_request.draft && github.event.pull_request.head.repo.full_name == github.repository }}
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: windows-2022
timeout-minutes: 40
env:
Expand Down Expand Up @@ -50,10 +58,17 @@ jobs:
run: |
cmake -S apps/arstack_studio -B build-studio-preview -G "Visual Studio 17 2022" -A x64 -DARIEC61850_WARNINGS_AS_ERRORS=ON -DARSTACK_STUDIO_ENGINEERING_PREVIEW=ON
if ($LASTEXITCODE -ne 0) { throw 'Preview configuration failed' }
cmake --build build-studio-preview --config Release --target arstack_studio arstack_session_harness --parallel 2
cmake --build build-studio-preview --config Release --target arstack_studio arstack_session_harness arstack_clipboard_harness arstack_capture_harness --parallel 2
if ($LASTEXITCODE -ne 0) { throw 'Native Studio preview build failed' }
& "$PWD\build-studio-preview\Release\arstack_session_harness.exe"
if ($LASTEXITCODE -ne 0) { throw 'Native session regression failed' }
& "$PWD\build-studio-preview\Release\arstack_clipboard_harness.exe"
if ($LASTEXITCODE -ne 0) { throw 'Production native clipboard readback regression failed' }
# The exact production PCAP decoder must pass the real historical
# 24-byte/zero-packet and STOPPED+stale-FPS regression, not just
# the session and clipboard tests on Draft PRs.
& "$PWD\build-studio-preview\Release\arstack_capture_harness.exe"
if ($LASTEXITCODE -ne 0) { throw 'Native SV capture 24-byte PCAP / liveness regression failed' }
# Differentiate product code regressions from missing deployed DLLs.
$nativeGui = Join-Path $PWD 'build-studio-preview\Release\arstack_studio.exe'
$probe = Start-Process -FilePath $nativeGui -ArgumentList '--check-reference-template' -Wait -PassThru
Expand Down Expand Up @@ -95,6 +110,16 @@ jobs:
throw 'Matching firmware job did not provide its manifest'
}
$manifest = Get-Content -Raw -LiteralPath $manifestPath | ConvertFrom-Json
if ($manifest.phaseSyncPreview -ne $true -or
$manifest.bootSimulatedGlobalGmEnabled -ne $true -or
$manifest.bootSourceAutostartEnabled -ne $true -or
$manifest.defaultPtpPolicy -ne 'INTERNAL_GM_ONLY' -or
$manifest.globalGmTraceabilityPhysicallyProven -ne $false -or
$manifest.phaseServoEnabled -ne $true -or
$manifest.canonicalMacTxEvidenceEnabled -ne $true -or
$manifest.broadcastMirrorEnabled -ne $false) {
throw 'FAT preview requires simulated Global GM BOOT + PTP-source autostart + measured SV phase/MAC evidence, never LOCAL-only firmware'
}
$expectedCapabilities = @('SMV-4I4V', 'PROFILE', 'PROFILE-BINARY-V1', 'LIVE-SETPOINTS', 'SESSION-LEASE', 'PTP-P2', 'SMPSYNCH-AUTO')
foreach ($capability in $expectedCapabilities) {
if ($manifest.capabilities -notcontains $capability) { throw "PR firmware lacks capability: $capability" }
Expand Down Expand Up @@ -216,7 +241,7 @@ jobs:
$env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $stage 'firmware'
$env:ARSTACK_STUDIO_ESPFLASH = Join-Path $stage 'tools\espflash.exe'
$env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
foreach ($check in @('--check-reference-template', '--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
foreach ($check in @('--check-reference-template', '--check-firmware-contract', '--check-p0-policy', '--check-clipboard', '--check-app-lifecycle')) {
$probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
Write-Host "PACKAGED_PREVIEW_CHECK=$check EXIT=$($probe.ExitCode)"
if ($probe.ExitCode -ne 0) {
Expand Down Expand Up @@ -264,7 +289,7 @@ jobs:
$env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $installDir 'firmware'
$env:ARSTACK_STUDIO_ESPFLASH = Join-Path $installDir 'tools\espflash.exe'
$env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
foreach ($check in @('--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
foreach ($check in @('--check-firmware-contract', '--check-p0-policy', '--check-clipboard', '--check-app-lifecycle')) {
$probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
if ($probe.ExitCode -ne 0) { throw "Installed preview failed $check code $($probe.ExitCode)" }
}
Expand Down
33 changes: 31 additions & 2 deletions .github/workflows/arstack-studio-qt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
shell: powershell
run: |
cmake --build build-arstack-studio --config Release `
--target arstack_session_harness arstack_windows_ownership_harness --parallel
--target arstack_session_harness arstack_clipboard_harness arstack_windows_ownership_harness --parallel

- name: S8A deterministic session harness on Windows
timeout-minutes: 1
Expand All @@ -98,6 +98,16 @@ jobs:
throw "S8A Windows deterministic harness failed with exit code $exitCode."
}

- name: Native Windows clipboard roundtrip regression
timeout-minutes: 1
shell: powershell
run: |
$exe = Join-Path $PWD 'build-arstack-studio\Release\arstack_clipboard_harness.exe'
& $exe
if ($LASTEXITCODE -ne 0) {
throw "Native Windows OS clipboard readback failed: exit $LASTEXITCODE"
}

- name: S8B cross-process ownership and serial-loss harness
timeout-minutes: 1
shell: powershell
Expand Down Expand Up @@ -174,6 +184,10 @@ jobs:
shell: bash
run: python3 apps/arstack_studio/tests/check_operator_workspace.py

- name: Independent SV PCAP decoder deterministic regressions
shell: bash
run: python3 -m unittest discover -s tests -p test_smv_wire_capture_audit.py -v

- name: Native binary profile authority regression
shell: bash
run: |
Expand Down Expand Up @@ -212,7 +226,7 @@ jobs:
run: |
set -o pipefail
cmake --build build-arstack-studio \
--target arstack_studio arstack_session_harness --parallel 2 \
--target arstack_studio arstack_session_harness arstack_capture_harness arstack_clipboard_harness --parallel 2 \
2>&1 | tee /tmp/arstack-studio-build.log

- name: 4I+4V reference template regression
Expand All @@ -236,6 +250,21 @@ jobs:
timeout 20s ./build-arstack-studio/arstack_session_harness \
2>&1 | tee /tmp/arstack-studio-session-harness.log

- name: Native GUI clipboard content/readback regression
shell: bash
run: |
set -o pipefail
timeout 15s env QT_QPA_PLATFORM=offscreen \
./build-arstack-studio/arstack_clipboard_harness \
2>&1 | tee /tmp/arstack-studio-clipboard-harness.log

- name: Native SV PCAP capture and CSV decoder regression
shell: bash
run: |
set -o pipefail
timeout 20s ./build-arstack-studio/arstack_capture_harness \
2>&1 | tee /tmp/arstack-studio-capture-harness.log

- name: Firmware bundle contract regression
shell: bash
run: |
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/arstack-studio-windows-lifecycle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,14 @@ jobs:
New-Item -ItemType Directory -Path 'studio-ui-evidence' -Force | Out-Null
Remove-Item Env:ARSTACK_STUDIO_QA_DIR -ErrorAction SilentlyContinue
Remove-Item Env:ARSTACK_STUDIO_QA_NATIVE_ONLY -ErrorAction SilentlyContinue
foreach ($scale in @('1', '1.5', '1.75')) {
foreach ($scale in @('1', '1.25', '1.5', '1.75')) {
$env:QT_SCALE_FACTOR = $scale
$suffix = 'dpi-' + [string][int]([double]::Parse($scale, [System.Globalization.CultureInfo]::InvariantCulture) * 100)
$logdir = Join-Path (Join-Path $PWD 'studio-ui-evidence') $suffix
New-Item -ItemType Directory -Path $logdir -Force | Out-Null
# Software viewport shots, when grabWindow supports the CI backend.
# Native Windows fidelity is verified separately below.
$env:ARSTACK_STUDIO_QA_DIR = $logdir
$stdout = Join-Path $logdir 'geometry-stdout.txt'
$stderr = Join-Path $logdir 'geometry-stderr.txt'
$probe = Start-Process -FilePath $exe -ArgumentList '--check-operator-ui' -Wait -PassThru `
Expand Down Expand Up @@ -136,11 +139,11 @@ jobs:
if ($probe.ExitCode -ne 0) {
throw "Native Windows screenshot acceptance failed, exit=$($probe.ExitCode)"
}
$png = Join-Path $env:ARSTACK_STUDIO_QA_DIR 'studio-960x620.png'
$png = Join-Path $env:ARSTACK_STUDIO_QA_DIR 'studio-960x680.png'
if (-not (Test-Path $png) -or (Get-Item $png).Length -lt 10000) {
throw 'Native Windows 960x620 screenshot was missing or empty'
throw 'Native Windows 960x680 screenshot was missing or empty'
}
Write-Host 'Windows Qt deterministic 3-viewports x 3-DPI geometry + native 960x620 screenshot: PASS'
Write-Host 'Windows Qt deterministic 5-viewports x 4-DPI geometry + native 960x680 screenshot: PASS'
- name: Upload desktop layout evidence
if: always()
uses: actions/upload-artifact@v4
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/ci-routing-policy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ on:
- '.github/workflows/**'
- 'scripts/check_ci_trigger_policy.py'
- 'docs/CI_WORKFLOW_ROUTING.md'
- 'docs/integration/**'
- 'tools/integration_preservation_audit.py'
push:
branches: [main]
paths:
- '.github/workflows/**'
- 'scripts/check_ci_trigger_policy.py'
- 'docs/CI_WORKFLOW_ROUTING.md'
- 'docs/integration/**'
- 'tools/integration_preservation_audit.py'
permissions:
contents: read
concurrency:
Expand All @@ -24,3 +28,11 @@ jobs:
- uses: actions/checkout@v4
- name: Verify scoped PR workflow routing
run: python3 scripts/check_ci_trigger_policy.py
- name: Verify preservation manifest and all 37 non-chain source inventories
shell: bash
run: |
if [ -f docs/integration/PR_PRESERVATION_SNAPSHOT_2026-10-22.json ]; then
python3 tools/integration_preservation_audit.py --verify-only
else
echo 'No integration manifest in this branch; no-op.'
fi
2 changes: 1 addition & 1 deletion .github/workflows/esp32p4-ptp-lab.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ jobs:
'g_announce_sent.load',
'g_sync_sent.load',
'g_follow_up_sent.load',
'return g_ptp_ready.load',
'return source_has_fresh_evidence();',
]
combined = eth + '\n' + ptp
missing = [token for token in required if token not in combined]
Expand Down
Loading
Loading