Determinism Tier 3: capture LLM reasoning and evidence trail in attestations, logs, and reports
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start with the attestation predicate at packages/darnit-baseline/src/darnit_baseline/attestation/predicate.py:82-102 and trace how CheckResult data reaches it through the harness-to-attestation path. Then inspect LLMConsultationResponse and the markdown/SARIF formatters named in the issue; identify their existing tests before changing behavior. Done means the specified pass and LLM evidence can be recorded and surfaced, with INFO logging and the remediation review checkpoint behaving as scoped.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
When a control's verdict is decided by an LLM consultation
(llm_eval handler resolving via the harness driver), the LLM's
reasoning is captured in the intermediate CheckResult but is
not serialized into attestations, is not logged, and is
not surfaced in markdown / SARIF report output (JSON contains it
if the caller opts into the full evidence dump).
An attestation without an evidence trail is a bare claim.
Reproducing an LLM verdict later requires re-running the LLM against
the same prompt, which the current system doesn't preserve.
This is Determinism Tier 3: nondeterministic results (LLM outputs
have unavoidable model-side variance) are legitimate, but the
reasoning that produced them must be recoverable.
Concrete gaps
Attestation predicate
packages/darnit-baseline/src/darnit_baseline/attestation/predicate.py:82-102
-- per-control attestation records:id,level,category,
status,message,evidence,source, and (post feature 025)
authority. It does NOT record:- Which sieve pass fired (
file_must_exist,exec,pattern,
llm_eval,manual). - For
exec: the command, stdout, exit code. - For
llm_eval: the prompt sent, the model's reasoning, the
model version, token usage. pass_history-- the cascade of attempts across phases.
- Which sieve pass fired (
LLM consultation response shape
packages/darnit/src/darnit/sieve/models.py:81-88--
LLMConsultationResponsecarriesstatus,confidence, a single
reasoning: str, andevidence_cited: list[str]. No structured
evidence trace, no model version, no request-id for correlation.
Report formatters
- Markdown / SARIF do NOT surface LLM reasoning. Full JSON does
(via the evidence dict) but the summary JSON strips it. - Markdown surfaces
resolving_pass_handlerandpass_history(per
tools/audit.py:918-931) so operators can see WHICH pass resolved
the control, but not the LLM's reasoning for the resolution.
Logging
packages/darnit/src/darnit/sieve/orchestrator.py-- no per-pass
disposition logging (PASS/FAIL/INCONCLUSIVE transitions across the
cascade are not emitted).packages/darnit/src/darnit/sieve/builtin_handlers.py-- no
logging of exec command invocation or LLM reasoning at INFO.
LLM-based remediation
packages/darnit-baseline/src/darnit_baseline/remediation/enhancer.py:56-133
-- LLM enhancement is invoked via anllm_fn()callback with no
capture of the request/response, no operator sign-off checkpoint
before applying LLM-suggested changes. This is a Principle IV
concern in addition to a determinism concern.
Scope
- Extend the attestation predicate per-control fields to include:
resolving_pass_handlerandresolving_pass_index.pass_history(already in CheckResult; propagate through).- For
llm_evalresolutions:llm_reasoning,llm_model, and
llm_confidence. Prompt inclusion is opt-in per attestation
profile (large; may be redacted for privacy). error_classwhen present (from #419).
- Extend
LLMConsultationResponseto carrymodeland (optionally)
request_id. - Extend markdown and SARIF formatters to surface LLM reasoning
when present. - Add INFO-level logs at: LLM request dispatch, LLM response receipt,
per-control final disposition. - For LLM-based remediation: log request/response at INFO; add an
operator-review checkpoint in the remediation orchestrator before
applying LLM-suggested changes (interactive prompt when TTY;
fail-loud when non-interactive without explicit
--accept-llm-suggestions).
Non-goals for v0
- Persisting the full LLM prompt in every attestation by default
(size concerns; opt-in per profile). - Storing LLM raw token streams / chain-of-thought (privacy and
size; final reasoning string is sufficient for audit trail). - Alternative LLM providers or a model-selection UI.
Constitution alignment
- II. Conservative-by-Default: an LLM PASS without recorded
reasoning is not a defensible audit result. - IV. Never Guess User Values: the LLM-remediation review
checkpoint is a hard implementation of this principle -- LLM
output alone MUST NOT apply changes. - V. Sieve Pipeline Integrity: the sieve records which pass
resolved a control; the attestation should record the same.
Related
- #418 (Determinism Tier 1) and #419 / #420 (Tier 2) -- companions.
- Feature 025 / RFC-0001 Stage 1 -- introduced
authority;
attestation already carries it. This issue extends the same file
with additional per-control fields. - Feature 026 / harness driver -- LLM dispatch lives there; the
reasoning-capture wiring goes on the harness->attestation path.
- Lingua principale
- Python
- Stelle
- 22
- Fork
- 27
- Merge medio
- 1g 20h
- PR unite (30g)
- 39
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di darnitdevorg/darnit
-
`darnit validate` crashes on openssf-baseline.toml summarising levelsForse già presa @i-am-paradox l’ha presa 2 giorni fa. Apertaneeds triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
darnitdevorg/darnit#589 ·
I maintainer di solito rispondono entro 1 giorno
-
Plugins hard-code version "0.1.0" while the packages are at 0.1.1Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaneeds triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
darnitdevorg/darnit#587 ·
I maintainer di solito rispondono entro 1 giorno
-
needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
darnitdevorg/darnit#585 ·
I maintainer di solito rispondono entro 1 giorno
-
quality
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
darnitdevorg/darnit#523 ·
I maintainer di solito rispondono entro 1 giorno
-
framework-design.md CEL examples use '!= null', which cel-python rejectsForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertadocumentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
darnitdevorg/darnit#516 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di darnitdevorg/darnit
Issue simili
-
Questions crashes on a real SQuAD2 no-answer predictionForse già presa @HuaTNA l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
GST is read as Gulf Standard Time (UTC+4) instead of Guam Standard Time (UTC+10)Forse già presa @yang00333 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
DOI-USGS/dataretrieval-python#454 ·
I maintainer di solito rispondono entro 4 giorni
-
area:core-platform effort:S priority:P3 status:in-review type:test
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 80/100
randomparity/kdive#3246 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Requantification library converts m/z to mass with the hydrogen-atom mass instead of the proton massApertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
nf-core/metaboigniter#130 ·
I maintainer di solito rispondono entro 1 giorno
-
netbox status: needs owner type: documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
netbox-community/netbox#23412 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno