Skip to content

Feat/v0.2.0 change assessment - #5

Merged
alvagante merged 4 commits into
mainfrom
feat/v0.2.0-change-assessment
Aug 29, 2026
Merged

Feat/v0.2.0 change assessment#5
alvagante merged 4 commits into
mainfrom
feat/v0.2.0-change-assessment

Conversation

@alvagante

Copy link
Copy Markdown
Member

No description provided.

alvagante and others added 3 commits August 29, 2026 15:07
…ocument

`explain` is a second, independent step over a report `compare` already
wrote. It reads that document, optionally a caller-supplied change
context, sends one batched OpenAI-compatible request built from
deterministically ranked aggregate groups and a binary-fixed task prompt,
validates the response locally against a closed risk enum and the group
ids it sent, and writes a separately versioned assessment artifact plus a
re-rendered HTML report.

`compare` is unchanged: same result document schema, same determinism,
same exit codes, same service reach. The v0.1.0 acceptance suite passes
unmodified, and both directions of the reach guarantee are asserted by
failing the test if the wrong endpoint is contacted.

The package split is the disclosure boundary made structural.
`internal/assess` decides what may leave the process — group ranking and
selection, pseudonymization, fencing, prompt assembly — and
`internal/inference` only knows how to send it, with no knowledge of
catalogs. The outbound payload is constructed field by field rather than
by marshalling a `model.Result`, so what PIACE discloses is a question
with an answer someone can read.

Two decisions are recorded as ADRs: the assessment stays out of the
result document (0002), and the inference service is the one scoped
exception to the mTLS-only rule (0003). Writing the second one exposed
that `internal/transport` stripped `Authorization` only on redirect;
`Client.Do` now deletes it unconditionally, so that scoping is enforced
rather than assumed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- new examples/ directory with a services/targets pair for each documented
  pattern: PuppetDB baseline (the supported path), frozen snapshot baseline,
  v3 legacy, and the explain pipeline (change context, policy notes,
  inference-enabled and explain-only services files)
- every file passes the strict loader and carries inline comments covering
  the traps: per-file path resolution, capture's lack of a destination flag,
  and v3 silently corrupting a PuppetDB baseline
- README points at examples/ from the config section and the doc index
Copilot AI lite review requested due to automatic review settings August 29, 2026 17:27

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@alvagante
alvagante merged commit 2dd849a into main Aug 29, 2026
3 checks passed
@alvagante
alvagante deleted the feat/v0.2.0-change-assessment branch August 29, 2026 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants