Import an external audit (claude-seo shape)
Turns a point-in-time audit report into organic-os proposals without
re-deriving the audit. The import trusts but attributes: findings keep
their original evidence labels ([Measured]/[Inference]/[Unverified]), the
original finding text rides in each proposal verbatim, and anything our
own audit dimensions would dispute is flagged for the human, never
silently rewritten.
- Input: a file path from the user (a FULL-AUDIT-REPORT.md, an
ACTION-PLAN.md, or similar markdown) or report text pasted in chat.
Pasted text: write it to a temp file first. Read site-profile.yaml for
the approval channel and the site URL.
- Parse and rank with the import module - stdlib only, defensive by
design (the format is theirs and may vary between versions; whatever
matches no item pattern is preserved in
parsed["unparsed"], never
dropped): PYTHONPATH="$CLAUDE_PLUGIN_ROOT/lib" python3 -c snippet
importing hoo.audit_import - parsed = parse_report(text), then
props = to_proposals(parsed, max_items=5).
- Create each proposal via
create_item(kind=p["kind"], slug=p["slug"], title=p["title"], body=p["body"], target=<the finding's page URL if one appears in it, else parsed["source_meta"]["page_url"], else the profile site URL>, source="import-audit"). create_item is the ONLY
birth path - items are born proposed with an empty approvals list
and are NEVER auto-approved; approval is the human's act, on the
normal gate. Each body already carries the verbatim finding (quoted),
its evidence label, the attribution line, and the dimension-mapping
note: overlap names the onsite-audit dimension (skills/onsite-audit
steps 3-4) via the DIMENSION_HINTS map in
plugin/lib/hoo/audit_import.py; an llms.txt finding gets the
deliberate-skip note (our position in plugin/docs/evidence.md); no
overlap is marked external-only and imported as-is on the source
audit's evidence.
- Present a summary table in-session:
- imported items: title, source severity, dimension mapping
(dimension name | deliberate-skip | external-only)
- skipped items: title + reason (ranked below the max_items cut;
re-run with a higher max_items to import them)
- unparsed excerpt count, with a pointer that the excerpts were
preserved, not dropped
- Rebuild the queue and route the approval notification through the
configured channel exactly like any propose run: one
core.approval.notify_pending(<brain>, send) call with the channel
selection from skills/onsite-propose step 4. An item is
marked notified ONLY after its send returns without raising, so a failed
send is retried on the next run rather than lost, and re-runs never
re-notify.
- Append ONE signal recording the import: source audit date
(
parsed["source_meta"]["audit_date"]), items parsed, proposals
created, skipped count, unparsed excerpt count.
Pattern credit: claude-seo (https://github.com/AgriciDaniel/claude-seo),
credited in README.md since v0.1.0. They audit, we operate.
1---2name: hoo-import-audit3description: Use to import an external claude-seo audit report or action plan as gated proposals - "import this audit", "turn this audit report into proposals", /organic-os:import-audit. They audit, we operate.4---56# Import an external audit (claude-seo shape)78Turns a point-in-time audit report into organic-os proposals without9re-deriving the audit. The import trusts but attributes: findings keep10their original evidence labels ([Measured]/[Inference]/[Unverified]), the11original finding text rides in each proposal verbatim, and anything our12own audit dimensions would dispute is flagged for the human, never13silently rewritten.14151. Input: a file path from the user (a FULL-AUDIT-REPORT.md, an16 ACTION-PLAN.md, or similar markdown) or report text pasted in chat.17 Pasted text: write it to a temp file first. Read site-profile.yaml for18 the approval channel and the site URL.192. Parse and rank with the import module - stdlib only, defensive by20 design (the format is theirs and may vary between versions; whatever21 matches no item pattern is preserved in `parsed["unparsed"]`, never22 dropped): `PYTHONPATH="$CLAUDE_PLUGIN_ROOT/lib" python3 -c` snippet23 importing `hoo.audit_import` - `parsed = parse_report(text)`, then24 `props = to_proposals(parsed, max_items=5)`.253. Create each proposal via `create_item(kind=p["kind"], slug=p["slug"],26 title=p["title"], body=p["body"], target=<the finding's page URL if27 one appears in it, else parsed["source_meta"]["page_url"], else the28 profile site URL>, source="import-audit")`. `create_item` is the ONLY29 birth path - items are born `proposed` with an empty approvals list30 and are NEVER auto-approved; approval is the human's act, on the31 normal gate. Each body already carries the verbatim finding (quoted),32 its evidence label, the attribution line, and the dimension-mapping33 note: overlap names the onsite-audit dimension (skills/onsite-audit34 steps 3-4) via the `DIMENSION_HINTS` map in35 `plugin/lib/hoo/audit_import.py`; an llms.txt finding gets the36 deliberate-skip note (our position in plugin/docs/evidence.md); no37 overlap is marked external-only and imported as-is on the source38 audit's evidence.394. Present a summary table in-session:40 - imported items: title, source severity, dimension mapping41 (dimension name | deliberate-skip | external-only)42 - skipped items: title + reason (ranked below the max_items cut;43 re-run with a higher max_items to import them)44 - unparsed excerpt count, with a pointer that the excerpts were45 preserved, not dropped465. Rebuild the queue and route the approval notification through the47 configured channel exactly like any propose run: one48 `core.approval.notify_pending(<brain>, send)` call with the channel49 selection from skills/onsite-propose step 4. An item is50 marked notified ONLY after its send returns without raising, so a failed51 send is retried on the next run rather than lost, and re-runs never52 re-notify.536. Append ONE signal recording the import: source audit date54 (`parsed["source_meta"]["audit_date"]`), items parsed, proposals55 created, skipped count, unparsed excerpt count.5657Pattern credit: claude-seo (https://github.com/AgriciDaniel/claude-seo),58credited in README.md since v0.1.0. They audit, we operate.