docs(sccm): prepare role-aware server intake corpus (#335) - #337
Conversation
|
@coderabbitai review Please review this #335 preparation slice against the server-intake execution contract. Focus on producer-role versus workflow-subject provenance, collision-safe paths, exact byte/limit semantics, chronology, conservative coverage states, sanitization, and the absence of production/native-acceptance claims. |
|
Warning Review limit reached
Next review available in: 15 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (13)
📒 Files selected for processing (27)
📝 WalkthroughWalkthroughAdds a provisional Issue ChangesSCCM server intake
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related issues
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
|
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Pull request overview
Prepares the SCCM Server role-aware intake corpus for issue #335 by adding design documentation plus a synthetic, privacy-safe fixture matrix (manifests, expected outputs, and minimal evidence files) that will later be mapped onto the shared SCCM schema from #318.
Changes:
- Add the role-aware server intake preparation doc (source catalog, manifest/provenance proposal, adapter design notes, and fixture matrix).
- Add synthetic SCCM server intake fixtures for 11 scenarios (manifests + expected outputs) covering role/topology provenance, configured-path collisions, rotations, multiline logical records, and conservative coverage states.
- Add minimal synthetic evidence files referenced by the manifests for captured/capped artifacts.
Reviewed changes
Copilot reviewed 27 out of 40 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/sccm/preparation/issue-335-server-intake.md | Prep doc describing role-aware server intake constraints, source catalog, and fixture intent for #335 pending #318 contracts. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/README.md | Documents fixture privacy guarantees, scenario structure, and validation expectations. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/manifest.json | Scenario manifest: multi-role topology with producer/subject split. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/expected.json | Scenario expectations: canonical ordering + conservative coverage assertions. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.log | Minimal CCM evidence for MP policy (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-dp-distribution/subject-distribution-point/current/distmgr.log | Minimal CCM evidence for site-produced DP workflow subject (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-sitecomp/current/sitecomp.log | Minimal CCM evidence for site component log (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-sup-sync/subject-software-update-point/current/wsyncmgr.log | Minimal CCM evidence for site-produced SUP workflow subject (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/manifest.json | Scenario manifest: configured non-default root + absent default candidate semantics. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/expected.json | Scenario expectations: candidate-only absence does not imply role absence. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.log | Minimal CCM evidence for configured-root MP policy (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/manifest.json | Scenario manifest: two configured roots with colliding basenames requiring collision-safe paths. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json | Scenario expectations: no overwrite/merge; distinct fingerprints and references. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/evidence/sccm/server/management-point/server-mp-policy/root-7d4a9c2e/current/MP_GetPolicy.log | Evidence for collision case root A (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/evidence/sccm/server/management-point/server-mp-policy/root-b83f10d6/current/MP_GetPolicy.log | Evidence for collision case root B (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/manifest.json | Scenario manifest: current + rotated (timestamped/numbered/lo_) members with shared lineage. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/expected.json | Scenario expectations: stable rotation ordering and collision-safe unique paths. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/timestamped-20260729-235700/MP_GetPolicy.log.20260729-235700 | Evidence for timestamped rotation (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/numbered-2/MP_GetPolicy.log.2 | Evidence for numbered rotation (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/lo_/MP_GetPolicy.log.lo_ | Evidence for .lo_ rotation (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.log | Evidence for current log (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/manifest.json | Scenario manifest: multiline logical record framing case. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/expected.json | Scenario expectations: physical 2-line record becomes 1 logical record. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.log | Evidence with a CCM record spanning multiple physical lines. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/absent-dp/manifest.json | Scenario manifest: default DP candidate absent without observed DP role. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/absent-dp/expected.json | Scenario expectations: coverage gap only; forbidden role-health inference. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/access-denied-mp/manifest.json | Scenario manifest: access-denied capture state for MP policy. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/access-denied-mp/expected.json | Scenario expectations: access coverage + bounded next-request guidance. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/manifest.json | Scenario manifest: capped capture with explicit byte limit + truncation marker. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/expected.json | Scenario expectations: capped coverage; not parseable; no terminal SUP health. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/evidence/sccm/server/site-server/server-sup-sync/subject-software-update-point/current/wsyncmgr.log | Minimal capped evidence payload for SUP control log (partial). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/skipped-iis/manifest.json | Scenario manifest: optional IIS supplemental source explicitly skipped. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/skipped-iis/expected.json | Scenario expectations: skip preserved; not a required-source failure. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsupported-db-supplement/manifest.json | Scenario manifest: explicitly unsupported DB export retained but unclassified. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsupported-db-supplement/expected.json | Scenario expectations: unsupported retained outside reducers; no DB/role inference. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/manifest.json | Scenario manifest: deliberately unsorted artifact list for canonicalization tests. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/expected.json | Scenario expectations: canonical sort + byte-identical normalized output. |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.log | Evidence for unsorted-manifest MP policy (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/site-server/server-sitecomp/current/sitecomp.log | Evidence for unsorted-manifest site component log (captured). |
| crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/site-server/server-status/current/statmgr.log | Evidence for unsorted-manifest site status log (captured). |
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (1)
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json (1)
14-16: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick winCover exact byte accounting in all expected fixtures.
The expected outputs validate encoding and collection limits but omit
bytesCopied, so byte-counting regressions can pass.
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json#L14-L16: assert173and172.crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/expected.json#L5-L5: assert207.crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/expected.json#L8-L12: assert each rotation artifact’s exact copied-byte value from its manifest.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json` around lines 14 - 16, Update the expected artifactProvenance entries to include exact bytesCopied values: set the two collision artifacts to 173 and 172 in crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json lines 14-16, set the multiline artifact to 207 in crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/expected.json line 5, and set each rotation artifact to its exact copied-byte value from its manifest in crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/expected.json lines 8-12.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/manifest.json`:
- Line 9: Update the manifest entry’s relativePath for artifactId
"sup-sync-capped" to include deterministic, sanitized components for
workflowSubject.instanceHandle and configuredPathProvenance.pathFingerprint, or
use the established collision-suffix contract. Preserve the existing evidence
directory structure while ensuring captures from different subject instances or
configured roots cannot resolve to the same path.
In `@docs/sccm/preparation/issue-335-server-intake.md`:
- Around line 70-71: Update the artifactId definition in the manifest artifact
documentation to require deterministic derivation from the canonical producer,
source, subject, path, and rotation identity rather than discovery order.
Specify collision disambiguation while preserving uniqueness across all artifact
states, so reordering manifest input cannot change sort keys or evidence
references.
- Around line 119-123: The preparation rotation-order documentation must define
a total deterministic ordering across timestamped, numbered, and current
members, including exact sort keys and tie-breakers for multiple files, equal
timestamps, and cross-family comparisons. Update the rotation-order statement
and associated `rotations` fixture guidance so normalized output and evidence
IDs cannot vary between equivalent inputs.
- Around line 72-76: Define one exact byte-limit contract in
docs/sccm/preparation/issue-335-server-intake.md at lines 72-76, specifying
whether limits count raw or encoded bytes, that limits are inclusive, how
multibyte content is handled, and how capped payloads are represented. Update
crates/cmtraceopen-parser/tests/fixtures/sccm/server/README.md at lines 40-45 to
require bytesCopied validation against that same explicitly defined quantity.
- Around line 124-128: Define a single chronology relation in
docs/sccm/preparation/issue-335-server-intake.md lines 124-128: identify the
authoritative timestamp for multi-record files, specify the comparison direction
and allowed clock-skew tolerance between rotated filenames and record times, and
state that invalid or unknown offsets cannot be normalized or compared. Apply
the same rule in crates/cmtraceopen-parser/tests/fixtures/sccm/server/README.md
lines 54-56 by replacing any undefined exact-match validation with the
documented relation.
- Around line 102-106: The versioned manifest export must also sanitize captured
evidence payloads and their derived fields, not only host/path fields. In the
writer and public-export flow described here, either enforce that evidence
payloads remain internal-only or apply and test redaction before export while
preserving the existing status distinctions and approved opaque handles.
- Around line 94-100: Update the capture writer requirements so collision keys
are computed before any artifacts are written, or root/instance identity is
always included for sources that may collide. Ensure allocation is
deterministic, writes are atomic and no-overwrite, and distinct roots or
instances retain separate artifact IDs/evidence references without normalization
merging.
---
Nitpick comments:
In
`@crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json`:
- Around line 14-16: Update the expected artifactProvenance entries to include
exact bytesCopied values: set the two collision artifacts to 173 and 172 in
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.json
lines 14-16, set the multiline artifact to 207 in
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/expected.json
line 5, and set each rotation artifact to its exact copied-byte value from its
manifest in
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/expected.json
lines 8-12.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: db6f08f4-491d-4020-abe9-b35c27d20234
⛔ Files ignored due to path filters (13)
crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/evidence/sccm/server/site-server/server-sup-sync/subject-software-update-point/current/wsyncmgr.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/evidence/sccm/server/management-point/server-mp-policy/root-7d4a9c2e/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/evidence/sccm/server/management-point/server-mp-policy/root-b83f10d6/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-dp-distribution/subject-distribution-point/current/distmgr.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-sitecomp/current/sitecomp.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/evidence/sccm/server/site-server/server-sup-sync/subject-software-update-point/current/wsyncmgr.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/management-point/server-mp-policy/current/MP_GetPolicy.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/site-server/server-sitecomp/current/sitecomp.logis excluded by!**/*.logcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/evidence/sccm/server/site-server/server-status/current/statmgr.logis excluded by!**/*.log
📒 Files selected for processing (27)
crates/cmtraceopen-parser/tests/fixtures/sccm/server/README.mdcrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/absent-dp/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/absent-dp/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/access-denied-mp/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/access-denied-mp/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/capped-sup/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/collision-same-basename-configured-roots/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/complete-multi-role/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/configured-nondefault-path/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/multiline/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/lo_/MP_GetPolicy.log.lo_crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/numbered-2/MP_GetPolicy.log.2crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/evidence/sccm/server/management-point/server-mp-policy/timestamped-20260729-235700/MP_GetPolicy.log.20260729-235700crates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/rotations/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/skipped-iis/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/skipped-iis/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsorted-manifest/manifest.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsupported-db-supplement/expected.jsoncrates/cmtraceopen-parser/tests/fixtures/sccm/server/intake/unsupported-db-supplement/manifest.jsondocs/sccm/preparation/issue-335-server-intake.md
|
@coderabbitai full review Round 3 commit ebfdab6 addresses the requested producer-placement, bundle-scoped identity, true capped-CCM, collision, raw-byte, redaction, rotation-order, chronology, and exact-byte contract findings. Please re-review the complete current diff; existing requested-changes history is intentionally preserved until this pass completes. |
|
✅ Action performedFull review finished. Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 15 minutes. |
Scope
Issue-scoped preparation slice for #335:
This PR contains preparation docs and fixtures only. It adds no production parser/Tauri code and does not claim a missing default path proves a missing or broken server role.
Dependency state
Production pure/native server intake remains blocked on the reviewed #318 wire contract. Native Windows/server-lab validation is a future acceptance source and is not claimed here.
Fixture matrix
Complete multi-role, configured non-default path, same-basename/two-root collision, current/
.log.lo_/numbered/timestamped rotations, multiline CCM, absent DP, access-denied MP, capped SUP workflow, skipped IIS, unsupported DB supplement, and unsorted input.Verification
cargo test --locked -p cmtraceopen-parser— 571 passedcargo clippy --locked -p cmtraceopen-parser --all-targets -- -D warnings— passcargo check --locked -p cmtraceopen-parser --target wasm32-unknown-unknown— passnpx tsc --noEmit— passgit diff --check f2caccf..HEAD— passReview gates
Independent semantic review is requested and remains required. CodeRabbit review is explicitly requested. No merge or production interface expansion is authorized by this preparation PR.
Refs #335
Refs #317
Summary by CodeRabbit
Documentation
Tests