* docs(decision): README decision-provider section, and the day-73 eval scripts with their recorded baseline (TASK-3123)
Housekeeping for PLAN-3114 tranche 1; no behaviour change.
- README: a Decision provider (optional) section covering what uses it,
that answers are asynchronous, configuration precedence (config file,
then the admin setting, then the environment; PAD_DECISION_PROVIDER=none
as the operator off-switch), and exactly what leaves the box and where.
- scripts/decision-eval/eval.py and eval2.py: the day-73 scripts, as run
(standard library, raw systemone API, key read from TYPESAFE_API_KEY). A
read and a pattern scan found no key or token literal.
- scripts/decision-eval/README.md: what each script measures, how to run
it, how to regenerate the corpora, and the day-73 baseline. A, B and D
were recomputed from the saved result files with the scripts' own
summary logic and match PLAN-3114 (D AUC 0.939; the B >=0.8 bucket
86.8%). C comes from PLAN-3114's trail. eval.py --dry-run over the saved
corpora queues the same 360 items the day-73 run did.
- scripts/decision-eval/.gitignore: the corpora are private workspace
exports and the results embed their content, so neither can be
committed; neither was.
The CHANGELOG line is queued as DOC-3242 (draft highlights for the
release after v0.15.0, per PLAYB-1160), since releases take their
changelog from goreleaser and a highlights DOC.
Claude-Session: https://claude.ai/code/session_016PXRzXhokr61CLbbu3Txj9
* docs(decision): the README section states what off, the triggers, server info and disabling actually do (TASK-3123, codex round 1)
Codex fact-checked every claim against the code, and four were too broad.
Off is not "every surface unchanged": the decisions list is empty and
playbook match answers 404. Jobs are also queued by restore and by comment
edit and delete (verified at items.go:614/3207/3437/5459 and
comments.go:133/196/416), and a closed item's job is dropped at the tick.
pad server info cannot see the admin setting. Disabling stops new calls
without a restart, but an in-flight request may finish. The scripts README
now says eval2.py runs at the top level.
Claude-Session: https://claude.ai/code/session_016PXRzXhokr61CLbbu3Txj9
* chore(decision-eval): attention threshold eval through the production state builder (TASK-3137)
The instrument and its recorded results. The pre-registered rule is met by
no threshold on the production state, so AttentionThreshold is unchanged;
the ablation shows the 70/70 labels are historical while production asks
about open items in the present. See RESULTS.md.
Claude-Session: https://claude.ai/code/session_01ByMjAhvdWgbAWWeGE9jwWd
* chore(decision-eval): replay each item to its last open moment (TASK-3137)
The lead-ruled instrument: BuildItemState over the item as of just before
its first logged terminal transition (r1), and at filing (r0), with the same
140 labels. The pre-registered rule (P >= 90%, R >= 60% on r1) is met by no
threshold, so AttentionThreshold is unchanged. RESULTS.md records the
finding: collection-membership labels cannot see the transient human waits
that a task at its last open moment really has.
Claude-Session: https://claude.ai/code/session_01ByMjAhvdWgbAWWeGE9jwWd
* test(models): classify the eval tool's generic decode site (TASK-3137)
The BUG-2685 guard found the new scripts/decision-eval readJSON helper as an
unclassified interface-destination decode. It decodes item, comment, history
and activity dumps, never a collection definition.
Claude-Session: https://claude.ai/code/session_01ByMjAhvdWgbAWWeGE9jwWd