100%/D: Trace Data Collection (S2F23/F24 + S6F1/F2, E30 §6.12)
tests / build-and-test (push) Failing after 32s
tests / build-and-test (push) Failing after 32s
New TraceStore keyed by TRID; each entry is a TraceConfig with
DSPER + TOTSMP + REPGSZ + SVID list. S2F23 validates that every SVID
exists (TIAACK=4 otherwise) and registers the trace.
S6F1's body is L,4 of {TRID U4, SMPLN U4, STIME ASCII, list_of <Item>}
— the application chooses whether each value Item is a scalar SVID
value or a packed batch.
The periodic sampling timer that turns an active TraceConfig into
S6F1 emissions is intentionally left to the application (E5 doesn't
mandate a specific scheduler and vendors typically already have one).
Four new SxFy in the catalog.
COMPLIANCE.md: Trace Data Collection Additional capability flips ✅.
Tests: 82 cases / 477 assertions.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -290,6 +290,23 @@ int main(int argc, char** argv) {
|
||||
return gem::s2f42_host_command_ack(result.ack, {});
|
||||
});
|
||||
|
||||
router.on(2, 23, [model, logfn](const s2::Message& msg) {
|
||||
auto req = gem::parse_s2f23(msg);
|
||||
auto ack = gem::TraceAck::Accept;
|
||||
if (!req) {
|
||||
ack = gem::TraceAck::InvalidPeriod;
|
||||
} else {
|
||||
for (auto v : req->svids) {
|
||||
if (!model->vid_exists(v)) { ack = gem::TraceAck::UnknownVid; break; }
|
||||
}
|
||||
if (ack == gem::TraceAck::Accept) {
|
||||
model->traces.add({req->trid, req->dsper, req->totsmp, req->repgsz, req->svids});
|
||||
}
|
||||
}
|
||||
logfn("S2F23 -> S2F24 TIAACK=" + std::to_string(static_cast<int>(ack)));
|
||||
return gem::s2f24_trace_initialize_ack(ack);
|
||||
});
|
||||
|
||||
router.on(2, 45, [model, logfn](const s2::Message& msg) {
|
||||
auto req = gem::parse_s2f45(msg);
|
||||
auto ack = gem::LimitMonitorAck::Accept;
|
||||
|
||||
Reference in New Issue
Block a user