PNT next-steps items 1, 4, 3: Evaluate front-door, typed report, egress lint#6
Merged
Conversation
Item 1 — Install signpost + promote Evaluate:
- README leads the three modes with Evaluate ("audit any contact app for
safety before you install it") and carries a symlink install snippet.
- llms.txt opens with a cold-agent "start with the skill" route to SKILL.md.
Item 4 — Typed evaluate-report artifact:
- tools/evaluate-report.schema.json (JSON Schema Draft 2020-12): AC-keyed
findings, per-AC status, citations, summary posture, and a source-tagged
evidence array. Lives in tools/ (not contracts/) since it realizes no AC.
- SKILL.md evaluate flow emits the artifact as source of truth, prose as a view.
Item 3 — Egress lint (deterministic AC-1 sovereignty check):
- tools/egress-lint.py static-scans for off-device egress vectors against a
per-flavor egress-allow.json allow-list; --json emits report-schema evidence.
- Self-test fixtures + new egress-lint-selftest CI job.
Docs: users-guide.md threads all three through the build/audit flows, splits the
status note into tested (deterministic tooling) vs not-yet-exercised (skill
flows), and expands tool discovery. Items 1/4/3 marked done in the plan.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
richbodo
added a commit
that referenced
this pull request
May 31, 2026
egress-lint.py and evaluate-report.schema.json (landed on main via #6) are toolkit artifacts too — stamp them and add them to the lint's versioned set, so 'the entire toolkit is versioned as a unit' actually holds after the merge with main. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced May 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements three items from
plans/pnt-next-steps-plan.md(execution order 1 → 4 → 3). Items 5/6 (community-care use case, Tonsky file-sync) and item 2 (skill split) are deferred per the plan.Item 1 — Install signpost + promote Evaluate
README.md: the three modes now lead with Evaluate ("audit any contact app for safety before you install it"), with a concrete symlink install snippet pointing to the User's Guide.llms.txt: opens with a cold-agent "start with the skill" route toSKILL.mdas the entry point.Item 4 — Typed evaluate-report artifact
tools/evaluate-report.schema.json(JSON Schema Draft 2020-12): AC-keyedfindingswith per-AC status (conformant/non-conformant/not-applicable/unable-to-determine), code-location citations, asummaryposture, and asource-tagged (deterministic/llm/human)evidencearray. Conditional rules enforce citations on (non)conformant and rationale on n/a + undetermined.tools/, notcontracts/, because it realizes no AC (would faillint-spec-ids.py).SKILL.mdevaluate flow emits the artifact as source of truth; the prose report is a view over it. Makes two runs on the same candidate diffable.Item 3 — Egress lint (deterministic AC-1 sovereignty check)
tools/egress-lint.py: static scan for off-device egress vectors (fetch/XHR/sendBeacon/WebSocket/EventSource/import()/importScripts/axios/jQuery and HTMLsrc/action/object data/<link href>/<use href>), flagging remote origins not on a per-flavoregress-allow.json. Ignores localhost, root-relative paths,data:/mailto:,xmlns, and<a href>navigation.--jsonemits asource: deterministic,tool: egress-lintevidence object that validates against#/$defs/evidencein the item-4 schema and folds into an AC-1 finding (verified).tools/egress-lint-fixtures/{clean,dirty}, enforced by a newegress-lint-selftestCI job.Docs
docs/users-guide.md: signals Evaluate as the low-friction front door, makes the typed-report diff/drift workflow actionable, threads egress-lint through the build (Goal 1) and audit (Goal 2) flows, expands tool discovery, and splits the status note into tested (deterministic tooling) vs not-yet-exercised-end-to-end (build/audit/contribute skill flows).plans/pnt-next-steps-plan.md: items 1, 4, 3 marked done.Verification (local)
lint-spec-ids.py→ exit 0 (12/12 contracts).xmlns/<a href>/mailto:/data:/localhost/root-relative.--jsonevidence validates against the schema and drops into a full report.🤖 Generated with Claude Code