Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
44f9722
test(sccm): define pure client intake contract
adamgell Jul 31, 2026
1081ce6
feat(sccm): define pure client intake coverage
adamgell Jul 31, 2026
4791a39
test(sccm): harden client intake provenance boundaries
adamgell Jul 31, 2026
fd405bd
feat(sccm): validate client intake provenance
adamgell Jul 31, 2026
7a2e0de
test(sccm): reject unsafe client intake provenance
adamgell Jul 31, 2026
cc545fe
fix(sccm): bound client intake provenance paths
adamgell Jul 31, 2026
c9f2e6c
test(sccm): pin bounded intake path namespaces
adamgell Jul 31, 2026
06f8693
fix(sccm): allowlist client intake path namespaces
adamgell Jul 31, 2026
3ffcbc3
test(sccm): reject impossible intake timestamp paths
adamgell Jul 31, 2026
5447056
fix(sccm): validate intake timestamp path values
adamgell Jul 31, 2026
807eb6b
test(sccm): reject unnamespaced path fingerprints
adamgell Jul 31, 2026
0dd4884
fix(sccm): namespace client path fingerprints
adamgell Jul 31, 2026
a530cb9
test(sccm): reject identity-bearing synthetic handles
adamgell Jul 31, 2026
137036c
fix(sccm): bound synthetic fingerprint vocabulary
adamgell Jul 31, 2026
c42c507
test(sccm): reject numeric synthetic identities
adamgell Jul 31, 2026
acf6372
fix(sccm): constrain synthetic numeric markers
adamgell Jul 31, 2026
69a3370
test(sccm): reject free-form intake metadata
adamgell Jul 31, 2026
108013f
fix(sccm): bound intake metadata vocabularies
adamgell Jul 31, 2026
249063a
test(sccm): reject free-form unknown rotations
adamgell Jul 31, 2026
7833d57
fix(sccm): require opaque unknown rotations
adamgell Jul 31, 2026
7db2c06
test(sccm): close intake identity channels
adamgell Jul 31, 2026
464668d
fix(sccm): bind client intake identities
adamgell Jul 31, 2026
43a4277
test(sccm): preserve shared location rotations
adamgell Jul 31, 2026
e6c10ec
fix(sccm): bind shared location rotations
adamgell Jul 31, 2026
2044b76
test(sccm): tighten client intake review regressions
adamgell Jul 31, 2026
995c15c
fix(sccm): tighten client path fingerprint grammar
adamgell Jul 31, 2026
019e3a0
test(sccm): reject complete capped client fragments
adamgell Jul 31, 2026
5439341
fix(sccm): fail closed on complete capped fragments
adamgell Jul 31, 2026
f983eb1
test(sccm): expose escaped client path probe gap
adamgell Jul 31, 2026
741ffb8
test(sccm): harden client intake privacy probes
adamgell Jul 31, 2026
175461d
test(sccm): expose client intake coverage contradictions
adamgell Jul 31, 2026
7cf05a0
fix(sccm): keep mixed-group client captures coherent
adamgell Jul 31, 2026
d176469
test(sccm): probe forward-slash user-root leak detection
adamgell Jul 31, 2026
ff2cc7c
fix(sccm): match normalized user roots in privacy probe
adamgell Jul 31, 2026
348d425
test(sccm): expose marker collisions with physical sources
adamgell Jul 31, 2026
613416b
fix(sccm): intersect source identity across declarations
adamgell Jul 31, 2026
61f8399
test(sccm): pin exact client intake error variants
adamgell Aug 1, 2026
a49c752
refactor(sccm): own the sha256 digest width in one helper
adamgell Aug 1, 2026
1651a9f
test(sccm): casefold every serialized leak assertion
adamgell Aug 1, 2026
bd6d00d
fix(sccm): preserve partial client intake coverage
adamgell Aug 1, 2026
7af8a3e
Merge remote-tracking branch 'origin/codex/parser-family-skeleton' in…
adamgell Aug 1, 2026
e6328ac
fix(sccm): repair client intake contracts (#432)
adamgell Aug 2, 2026
ad680a3
Merge SCCM integration into #319 client intake
adamgell Aug 2, 2026
3ef4462
test(sccm): construct invalid requests without serialization
adamgell Aug 2, 2026
73d2a1f
test(sccm): expose client intake wire gaps
adamgell Aug 2, 2026
73eba64
fix(sccm): validate client intake wire projections
adamgell Aug 2, 2026
e3558cb
docs(sccm): align client intake delivery state
adamgell Aug 2, 2026
8d68ed9
test(sccm): expose incomplete client intake oracle
adamgell Aug 2, 2026
f2f8bcc
test(sccm): bind complete client intake fixture oracle
adamgell Aug 2, 2026
5a870ea
docs(sccm): enumerate client coverage states
adamgell Aug 2, 2026
e6373f3
test(sccm): separate parse failure from fragment bounds
adamgell Aug 2, 2026
0284b8f
fix(sccm): distinguish parse failure from fragment bounds
adamgell Aug 2, 2026
5be9b95
docs(sccm): close client intake review nits
adamgell Aug 2, 2026
05d4bf0
docs(sccm): clarify client intake fixture contracts
adamgell Aug 2, 2026
269e713
fix(sccm): stabilize client intake wire shape
adamgell Aug 2, 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
189 changes: 186 additions & 3 deletions crates/cmtraceopen-parser/src/sccm/catalog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,156 @@ struct CatalogSpec {
family: SccmArtifactFamily,
}

/// Immutable client intake membership owned by the shared SCCM source
/// catalog. A physical source may feed more than one logical intake group;
/// `LocationServices.log` is intentionally captured once and projected into
/// both location and content coverage.
#[derive(Clone, Copy)]
pub(crate) struct SccmClientSourceMembership {
pub basename: &'static str,
pub logical_artifact_ids: &'static [&'static str],
}

const CLIENT_SOURCE_MEMBERSHIPS: &[SccmClientSourceMembership] = &[
SccmClientSourceMembership {
basename: "AppEnforce.log",
logical_artifact_ids: &["client-app-enforce"],
},
SccmClientSourceMembership {
basename: "ExecMgr.log",
logical_artifact_ids: &["client-app-enforce"],
},
SccmClientSourceMembership {
basename: "AppDiscovery.log",
logical_artifact_ids: &["client-app-intent"],
},
SccmClientSourceMembership {
basename: "AppIntentEval.log",
logical_artifact_ids: &["client-app-intent"],
},
SccmClientSourceMembership {
basename: "ccmsetup.log",
logical_artifact_ids: &["client-ccmsetup"],
},
SccmClientSourceMembership {
basename: "client.msi.log",
logical_artifact_ids: &["client-ccmsetup"],
},
SccmClientSourceMembership {
basename: "CAS.log",
logical_artifact_ids: &["client-content"],
},
SccmClientSourceMembership {
basename: "ContentTransferManager.log",
logical_artifact_ids: &["client-content"],
},
SccmClientSourceMembership {
basename: "DataTransferService.log",
logical_artifact_ids: &["client-content"],
},
SccmClientSourceMembership {
basename: "CcmEval.log",
logical_artifact_ids: &["client-evaluation"],
},
SccmClientSourceMembership {
basename: "CcmExec.log",
logical_artifact_ids: &["client-evaluation"],
},
SccmClientSourceMembership {
basename: "CcmRestart.log",
logical_artifact_ids: &["client-evaluation"],
},
SccmClientSourceMembership {
basename: "ClientIDManagerStartup.log",
logical_artifact_ids: &["client-identity"],
},
SccmClientSourceMembership {
basename: "CcmMessaging.log",
logical_artifact_ids: &["client-location"],
},
SccmClientSourceMembership {
basename: "ClientLocation.log",
logical_artifact_ids: &["client-location"],
},
SccmClientSourceMembership {
basename: "LocationServices.log",
logical_artifact_ids: &["client-location", "client-content"],
},
SccmClientSourceMembership {
basename: "PolicyAgent.log",
logical_artifact_ids: &["client-policy-agent"],
},
SccmClientSourceMembership {
basename: "PolicyAgentProvider.log",
logical_artifact_ids: &["client-policy-agent"],
},
SccmClientSourceMembership {
basename: "PolicyEvaluator.log",
logical_artifact_ids: &["client-policy-agent"],
},
SccmClientSourceMembership {
basename: "Scheduler.log",
logical_artifact_ids: &["client-policy-agent"],
},
SccmClientSourceMembership {
basename: "CIAgent.log",
logical_artifact_ids: &["client-policy-state"],
},
SccmClientSourceMembership {
basename: "CIDownloader.log",
logical_artifact_ids: &["client-policy-state"],
},
SccmClientSourceMembership {
basename: "StateMessage.log",
logical_artifact_ids: &["client-policy-state"],
},
SccmClientSourceMembership {
basename: "StatusAgent.log",
logical_artifact_ids: &["client-policy-state"],
},
SccmClientSourceMembership {
basename: "ScanAgent.log",
logical_artifact_ids: &["client-updates"],
},
SccmClientSourceMembership {
basename: "UpdatesDeployment.log",
logical_artifact_ids: &["client-updates"],
},
SccmClientSourceMembership {
basename: "UpdatesHandler.log",
logical_artifact_ids: &["client-updates"],
},
SccmClientSourceMembership {
basename: "UpdatesStore.log",
logical_artifact_ids: &["client-updates"],
},
SccmClientSourceMembership {
basename: "WUAHandler.log",
logical_artifact_ids: &["client-updates"],
},
SccmClientSourceMembership {
basename: "ReportingEvents.log",
logical_artifact_ids: &["client-windows-update-supplemental"],
},
];

pub(crate) fn declared_client_source_memberships() -> &'static [SccmClientSourceMembership] {
CLIENT_SOURCE_MEMBERSHIPS
}

const SOURCE_CATALOG: &[CatalogSpec] = &[
CatalogSpec {
basename: "CCMSetup",
basename: "ccmsetup",
logical_name: "ccmSetup",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientSetup,
},
CatalogSpec {
basename: "client.msi",
logical_name: "clientMsi",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientSetup,
},
CatalogSpec {
basename: "CcmEval",
logical_name: "ccmEval",
Expand Down Expand Up @@ -174,6 +317,30 @@ const SOURCE_CATALOG: &[CatalogSpec] = &[
role: SccmRole::Client,
family: SccmArtifactFamily::ClientPolicy,
},
CatalogSpec {
basename: "CIAgent",
logical_name: "ciAgent",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientPolicy,
},
CatalogSpec {
basename: "CIDownloader",
logical_name: "ciDownloader",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientPolicy,
},
CatalogSpec {
basename: "StateMessage",
logical_name: "stateMessage",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientPolicy,
},
CatalogSpec {
basename: "StatusAgent",
logical_name: "statusAgent",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientPolicy,
},
CatalogSpec {
basename: "Scheduler",
logical_name: "scheduler",
Expand Down Expand Up @@ -216,6 +383,12 @@ const SOURCE_CATALOG: &[CatalogSpec] = &[
role: SccmRole::Client,
family: SccmArtifactFamily::ClientApplication,
},
CatalogSpec {
basename: "ExecMgr",
logical_name: "execMgr",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientApplication,
},
CatalogSpec {
basename: "ScanAgent",
logical_name: "scanAgent",
Expand Down Expand Up @@ -246,6 +419,12 @@ const SOURCE_CATALOG: &[CatalogSpec] = &[
role: SccmRole::Client,
family: SccmArtifactFamily::ClientUpdates,
},
CatalogSpec {
basename: "ReportingEvents",
logical_name: "reportingEvents",
role: SccmRole::Client,
family: SccmArtifactFamily::ClientUpdates,
},
CatalogSpec {
basename: "smsts",
logical_name: "smsts",
Expand Down Expand Up @@ -411,7 +590,7 @@ pub fn classify_artifact_name(name: &str, role: SccmRole) -> SccmSourceCatalogEn
role,
family: entry.family.clone(),
rotation: parsed.rotation,
uses_ccm_records: true,
uses_ccm_records: catalog_entry_uses_ccm_records(entry),
supported_for_diagnosis: parsed.rotation_supported,
};
}
Expand Down Expand Up @@ -445,11 +624,15 @@ fn declared_catalog_entry(entry: &CatalogSpec, role: SccmRole) -> SccmSourceCata
role,
family: entry.family.clone(),
rotation: SccmRotation::Current,
uses_ccm_records: true,
uses_ccm_records: catalog_entry_uses_ccm_records(entry),
supported_for_diagnosis: true,
}
}

fn catalog_entry_uses_ccm_records(entry: &CatalogSpec) -> bool {
!matches!(entry.logical_name, "clientMsi" | "reportingEvents")
}

struct ParsedArtifactName<'a> {
basename: &'a str,
rotation: SccmRotation,
Expand Down
Loading