Skill Tracer
Skills › Scientific Agent Skills › scholar-evaluation › local_tooling.md

local_tooling.md

253 lines · skills/scholar-evaluation/references/local_tooling.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Local Deterministic Tooling
2

Local Deterministic Tooling

Raw lines 1 to 2
3## Security properties
4
5Every bundled script:
6
7- uses only the Python standard library;
8- reads bounded local `.json` or `.csv` files;
9- rejects symbolic-link inputs, duplicate JSON keys, excessive depth or size,
10 non-finite numbers, unknown schema fields, and common private-application
11 fields;
12- uses fixed schemas and never executes supplied text;
13- has no network, model, credential, environment-file, dynamic-code,
14 executable-serialization, or child-process behavior;
15- writes only minimized JSON reports and refuses to overwrite by default; and
16- does not copy evidence excerpts or raw source documents.
18Inputs are limited to 2 MiB, JSON depth 20, 25,000 structure nodes, 50 rubric
19criteria, 50 comparison evaluations, and 20,000 agreement rows. Outputs are
20limited to 2 MiB.
22Use an authorized local directory. Keep private source documents in the
23institution's records system and reference them with opaque local identifiers.

Security properties

Every bundled script:

  • uses only the Python standard library;
  • reads bounded local .json or .csv files;
  • rejects symbolic-link inputs, duplicate JSON keys, excessive depth or size, non-finite numbers, unknown schema fields, and common private-application fields;
  • uses fixed schemas and never executes supplied text;
  • has no network, model, credential, environment-file, dynamic-code, executable-serialization, or child-process behavior;
  • writes only minimized JSON reports and refuses to overwrite by default; and
  • does not copy evidence excerpts or raw source documents.

Inputs are limited to 2 MiB, JSON depth 20, 25,000 structure nodes, 50 rubric criteria, 50 comparison evaluations, and 20,000 agreement rows. Outputs are limited to 2 MiB.

Use an authorized local directory. Keep private source documents in the institution's records system and reference them with opaque local identifiers.

Raw lines 3 to 24
25## Templates
27- `assets/rubric_template.json` — valid structure, but deliberately records
28 content validity as not established.
29- `assets/evaluation_template.json` — structurally valid all-missing example.
30- `assets/evidence_manifest_template.json` — synthetic local-reference records.
31- `assets/process_checklist_template.json` — fail-closed unconfirmed controls.
32- `assets/ratings_template.csv` — pseudonymous synthetic agreement data.
34Copy a template into an authorized working directory before editing it. Do not
35replace synthetic identifiers with names or contact information.

Templates

  • assets/rubric_template.json — valid structure, but deliberately records content validity as not established.
  • assets/evaluation_template.json — structurally valid all-missing example.
  • assets/evidence_manifest_template.json — synthetic local-reference records.
  • assets/process_checklist_template.json — fail-closed unconfirmed controls.
  • assets/ratings_template.csv — pseudonymous synthetic agreement data.

Copy a template into an authorized working directory before editing it. Do not replace synthetic identifiers with names or contact information.

Raw lines 25 to 36
37## 1. Rubric schema validation
39```bash
40PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate_rubric.py \
41 --rubric assets/rubric_template.json
42```
44The validator checks:
46- fixed intended use and scholarly-work unit;
47- complete prohibited-use list;
48- construct, boundaries, limitations, and provenance;
49- content-validity status and reference;
50- bounded scale and complete anchors;
51- unique criteria and weights summing to one;
52- absence of common scored proxy measures;
53- required rater training, calibration, agreement, separately recorded
54 inter-rater reliability status, and drift controls; and
55- committee, conflict, appeal, accessibility, data-protection, subgroup, and
56 review-cycle governance.
58A rubric can be structurally `valid` while warning that content validity is not
59documented. Structural validity is not psychometric validity.

1. Rubric schema validation

PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate_rubric.py \
  --rubric assets/rubric_template.json

The validator checks:

  • fixed intended use and scholarly-work unit;
  • complete prohibited-use list;
  • construct, boundaries, limitations, and provenance;
  • content-validity status and reference;
  • bounded scale and complete anchors;
  • unique criteria and weights summing to one;
  • absence of common scored proxy measures;
  • required rater training, calibration, agreement, separately recorded inter-rater reliability status, and drift controls; and
  • committee, conflict, appeal, accessibility, data-protection, subgroup, and review-cycle governance.

A rubric can be structurally valid while warning that content validity is not documented. Structural validity is not psychometric validity.

Raw lines 37 to 60
Runs code python3 scripts/validate_rubric.py :40
61## 2. Bounded descriptive scoring
63```bash
64PYTHONDONTWRITEBYTECODE=1 python3 scripts/calculate_scores.py \
65 --rubric assets/rubric_template.json \
66 --evaluation assets/evaluation_template.json \
67 --output /tmp/scholar-score.json
68```
70The evaluation contains one entry for every criterion:
72```json
74 "criterion_id": "method_design",
75 "status": "rated",
76 "score": 3,
77 "uncertainty": 0.5,
78 "evidence_ids": ["EVIDENCE-SYNTHETIC-METHOD"],
79 "rationale_ref": "LOCAL-RATING-RATIONALE-METHOD"
81```
83For `missing` or `not_applicable`, `score` and `uncertainty` must be null and
84`evidence_ids` must be empty. A local rationale reference remains required.
86The output reports weighted contributions, coverage, missing and
87not-applicable weight, normalized score, and a bounded uncertainty range. It
88contains no quality label, threshold, decision, or recommendation.

2. Bounded descriptive scoring

PYTHONDONTWRITEBYTECODE=1 python3 scripts/calculate_scores.py \
  --rubric assets/rubric_template.json \
  --evaluation assets/evaluation_template.json \
  --output /tmp/scholar-score.json

The evaluation contains one entry for every criterion:

{
  "criterion_id": "method_design",
  "status": "rated",
  "score": 3,
  "uncertainty": 0.5,
  "evidence_ids": ["EVIDENCE-SYNTHETIC-METHOD"],
  "rationale_ref": "LOCAL-RATING-RATIONALE-METHOD"
}

For missing or not_applicable, score and uncertainty must be null and evidence_ids must be empty. A local rationale reference remains required.

The output reports weighted contributions, coverage, missing and not-applicable weight, normalized score, and a bounded uncertainty range. It contains no quality label, threshold, decision, or recommendation.

Raw lines 61 to 89
Runs code python3 scripts/calculate_scores.py :64
90## 3. Evidence traceability
92```bash
93PYTHONDONTWRITEBYTECODE=1 python3 scripts/check_traceability.py \
94 --rubric assets/rubric_template.json \
95 --evaluation assets/evaluation_template.json \
96 --evidence assets/evidence_manifest_template.json
97```
99The checker verifies that:
101- manifest, evaluation, work, and classification identifiers match;
102- every evidence identifier is unique;
103- every rated evidence reference resolves;
104- evidence is linked to the criterion that cites it;
105- source and access types are allowed; and
106- evidence is available and verified.
108It reports identifiers, paths, and counts only. It never opens or copies the
109referenced source.

3. Evidence traceability

PYTHONDONTWRITEBYTECODE=1 python3 scripts/check_traceability.py \
  --rubric assets/rubric_template.json \
  --evaluation assets/evaluation_template.json \
  --evidence assets/evidence_manifest_template.json

The checker verifies that:

  • manifest, evaluation, work, and classification identifiers match;
  • every evidence identifier is unique;
  • every rated evidence reference resolves;
  • evidence is linked to the criterion that cites it;
  • source and access types are allowed; and
  • evidence is available and verified.

It reports identifiers, paths, and counts only. It never opens or copies the referenced source.

Raw lines 90 to 110
Runs code python3 scripts/check_traceability.py :93
111## 4. Weight sensitivity and rank instability
113Provide two to 50 evaluation JSON files for distinct scholarly works:
115```bash
116PYTHONDONTWRITEBYTECODE=1 python3 scripts/weight_sensitivity.py \
117 --rubric assets/rubric_template.json \
118 --evaluation /tmp/work-a-evaluation.json \
119 --evaluation /tmp/work-b-evaluation.json \
120 --delta 0.2 \
121 --output /tmp/weight-sensitivity.json
122```
124For each criterion, the script multiplies its weight by `1-delta` and
125`1+delta`, renormalizes all weights to one, and recomputes descriptive scores.
126It reports:
128- every scenario and its floating-point weights;
129- each work's score and coverage per scenario;
130- score ranges;
131- base ordinal order and explicit tied pairs; and
132- pairwise order changes.
134Comparisons use unrounded scores with absolute tolerance `1e-9`; displayed
135scores and ranges are rounded to six decimals and can appear equal. This is a
136computational tolerance, not a threshold of meaningful scientific difference.
137Different criterion-status patterns generate a comparability warning.
139The base order is included solely to detect instability. It is not a ranking
140recommendation and must never be used for people or high-impact decisions.

4. Weight sensitivity and rank instability

Provide two to 50 evaluation JSON files for distinct scholarly works:

PYTHONDONTWRITEBYTECODE=1 python3 scripts/weight_sensitivity.py \
  --rubric assets/rubric_template.json \
  --evaluation /tmp/work-a-evaluation.json \
  --evaluation /tmp/work-b-evaluation.json \
  --delta 0.2 \
  --output /tmp/weight-sensitivity.json

For each criterion, the script multiplies its weight by 1-delta and 1+delta, renormalizes all weights to one, and recomputes descriptive scores. It reports:

  • every scenario and its floating-point weights;
  • each work's score and coverage per scenario;
  • score ranges;
  • base ordinal order and explicit tied pairs; and
  • pairwise order changes.

Comparisons use unrounded scores with absolute tolerance 1e-9; displayed scores and ranges are rounded to six decimals and can appear equal. This is a computational tolerance, not a threshold of meaningful scientific difference. Different criterion-status patterns generate a comparability warning.

The base order is included solely to detect instability. It is not a ranking recommendation and must never be used for people or high-impact decisions.

Raw lines 111 to 141
Runs code python3 scripts/weight_sensitivity.py :116
142## 5. Inter-rater agreement summaries
144The CSV header must be exactly:
146```text
147evaluation_id,work_id,rater_id,criterion_id,status,score
148```
150Use pseudonymous rater identifiers. One `evaluation_id` identifies a frozen
151work revision and evaluation round; all raters in that round use the same ID.
152Different rounds need different IDs. One evaluation ID cannot name two works.
153Ratings from separate rounds are never paired or overwritten. Run:
155```bash
156PYTHONDONTWRITEBYTECODE=1 python3 scripts/summarize_agreement.py \
157 --rubric assets/rubric_template.json \
158 --ratings assets/ratings_template.csv \
159 --output /tmp/agreement-summary.json
160```
162For each criterion and overall, the report includes:
164- pair observations;
165- exact agreement rate;
166- within-one-scale-step agreement rate;
167- mean absolute difference;
168- overlap, rated, missing, and not-applicable counts.
170Summaries pool all rater pairs within each work/round/criterion; a round with
171three rated raters contributes three pairs, and a round with two contributes
172one. Histograms avoid materializing the quadratic pair list. Missing and
173not-applicable statuses are excluded from score-pair denominators; omitted CSV
174rows have unknown status. Minimum-rater shortfalls are reported per rated
175round/criterion, even if the dataset has enough distinct raters overall.
177Rater identifiers are not emitted. These are descriptive agreement summaries,
178not chance-corrected reliability, generalizability, validity, or fairness
179evidence.

5. Inter-rater agreement summaries

The CSV header must be exactly:

evaluation_id,work_id,rater_id,criterion_id,status,score

Use pseudonymous rater identifiers. One evaluation_id identifies a frozen work revision and evaluation round; all raters in that round use the same ID. Different rounds need different IDs. One evaluation ID cannot name two works. Ratings from separate rounds are never paired or overwritten. Run:

PYTHONDONTWRITEBYTECODE=1 python3 scripts/summarize_agreement.py \
  --rubric assets/rubric_template.json \
  --ratings assets/ratings_template.csv \
  --output /tmp/agreement-summary.json

For each criterion and overall, the report includes:

  • pair observations;
  • exact agreement rate;
  • within-one-scale-step agreement rate;
  • mean absolute difference;
  • overlap, rated, missing, and not-applicable counts.

Summaries pool all rater pairs within each work/round/criterion; a round with three rated raters contributes three pairs, and a round with two contributes one. Histograms avoid materializing the quadratic pair list. Missing and not-applicable statuses are excluded from score-pair denominators; omitted CSV rows have unknown status. Minimum-rater shortfalls are reported per rated round/criterion, even if the dataset has enough distinct raters overall.

Rater identifiers are not emitted. These are descriptive agreement summaries, not chance-corrected reliability, generalizability, validity, or fairness evidence.

Raw lines 142 to 180
Runs code python3 scripts/summarize_agreement.py :156
181## 6. Bias and process checklist
183```bash
184PYTHONDONTWRITEBYTECODE=1 python3 scripts/check_process.py \
185 --process assets/process_checklist_template.json
186```
188The template is intentionally unconfirmed and therefore does not pass. Complete
189it only from documented local records. The checker covers:
191- qualified committee and training;
192- conflicts and recusal;
193- appeal and correction;
194- accessibility and accommodations;
195- purpose limitation, minimization, access, retention, and output controls;
196- construct, provenance, content evidence, rater quality, agreement,
197 inter-rater reliability review, uncertainty, missingness, traceability, and
198 sensitivity;
199- stakeholder, disciplinary, subgroup, and protected-attribute safeguards;
200- no automation, person ranking, or decision recommendation; and
201- drift, unintended-consequence, and periodic review.
203`high_impact_use: true` or any unconfirmed decision control blocks the process.
204The checklist does not authorize a prohibited use.

6. Bias and process checklist

PYTHONDONTWRITEBYTECODE=1 python3 scripts/check_process.py \
  --process assets/process_checklist_template.json

The template is intentionally unconfirmed and therefore does not pass. Complete it only from documented local records. The checker covers:

  • qualified committee and training;
  • conflicts and recusal;
  • appeal and correction;
  • accessibility and accommodations;
  • purpose limitation, minimization, access, retention, and output controls;
  • construct, provenance, content evidence, rater quality, agreement, inter-rater reliability review, uncertainty, missingness, traceability, and sensitivity;
  • stakeholder, disciplinary, subgroup, and protected-attribute safeguards;
  • no automation, person ranking, or decision recommendation; and
  • drift, unintended-consequence, and periodic review.

high_impact_use: true or any unconfirmed decision control blocks the process. The checklist does not authorize a prohibited use.

Raw lines 181 to 205
Runs code python3 scripts/check_process.py :184
206## 7. Report scaffold
208Generate a minimized scaffold:
210```bash
211PYTHONDONTWRITEBYTECODE=1 python3 scripts/generate_report_scaffold.py \
212 --rubric assets/rubric_template.json \
213 --evaluation assets/evaluation_template.json \
214 --output /tmp/developmental-report-scaffold.json
215```
217Optional companion reports:
219```bash
220PYTHONDONTWRITEBYTECODE=1 python3 scripts/generate_report_scaffold.py \
221 --rubric assets/rubric_template.json \
222 --evaluation /tmp/work-a-evaluation.json \
223 --traceability /tmp/traceability.json \
224 --agreement /tmp/agreement-summary.json \
225 --sensitivity /tmp/weight-sensitivity.json \
226 --process /tmp/process-check.json \
227 --output /tmp/developmental-report-scaffold.json
228```
230Agreement and sensitivity companions must list the current work/evaluation in
231`evaluation_records`; regenerate reports from older skill versions before using
232them as companions. Identifier checks do not detect content edited in place:
233freeze inputs and regenerate all checks after changes. The process checklist
234is a separate attestation and is not cryptographically bound to a work.
236The scaffold includes:
238- construct and provenance status;
239- descriptive scores and uncertainty;
240- empty local-reference slots for evidence, strengths, limitations, and
241 improvement options;
242- minimized quality-assurance statuses; and
243- fixed limitations and human-review fields.
245It does not draft findings from source documents or issue a decision.

7. Report scaffold

Generate a minimized scaffold:

PYTHONDONTWRITEBYTECODE=1 python3 scripts/generate_report_scaffold.py \
  --rubric assets/rubric_template.json \
  --evaluation assets/evaluation_template.json \
  --output /tmp/developmental-report-scaffold.json

Optional companion reports:

PYTHONDONTWRITEBYTECODE=1 python3 scripts/generate_report_scaffold.py \
  --rubric assets/rubric_template.json \
  --evaluation /tmp/work-a-evaluation.json \
  --traceability /tmp/traceability.json \
  --agreement /tmp/agreement-summary.json \
  --sensitivity /tmp/weight-sensitivity.json \
  --process /tmp/process-check.json \
  --output /tmp/developmental-report-scaffold.json

Agreement and sensitivity companions must list the current work/evaluation in evaluation_records; regenerate reports from older skill versions before using them as companions. Identifier checks do not detect content edited in place: freeze inputs and regenerate all checks after changes. The process checklist is a separate attestation and is not cryptographically bound to a work.

The scaffold includes:

  • construct and provenance status;
  • descriptive scores and uncertainty;
  • empty local-reference slots for evidence, strengths, limitations, and improvement options;
  • minimized quality-assurance statuses; and
  • fixed limitations and human-review fields.

It does not draft findings from source documents or issue a decision.

Raw lines 206 to 246
Runs code python3 scripts/generate_report_scaffold.py :211
247## Exit behavior
249- exit `0`: requested calculation or validation completed successfully;
250- exit `2`: invalid, blocked, incomplete, failed traceability, or unsafe input.
252Errors contain only stable codes and JSON paths, never supplied values. Use
253`--force` only when replacing a known local report.

Exit behavior

  • exit 0: requested calculation or validation completed successfully;
  • exit 2: invalid, blocked, incomplete, failed traceability, or unsafe input.

Errors contain only stable codes and JSON paths, never supplied values. Use --force only when replacing a known local report.

Raw lines 247 to 253