feat: file-based test loop for P-01/P-02 (CHG-0002) - #20447
Closed
WanderingStardust79 wants to merge 3 commits into
Closed
feat: file-based test loop for P-01/P-02 (CHG-0002)#20447WanderingStardust79 wants to merge 3 commits into
WanderingStardust79 wants to merge 3 commits into
Conversation
Append a gitsubmodule ecosystem block to .github/dependabot.yml so Dependabot tracks the tinker-atropos submodule. Monthly cadence, labelled "dependencies" + "submodule". Upstream's existing github-actions block (and the comment block explaining why pip is intentionally excluded under uv.lock pinning) is preserved verbatim — gitsubmodule is the one ecosystem upstream's policy doesn't cover, and this fork carries a submodule upstream does not. Refs: WanderingStardust79/paperclip-UCPM-orchestrator#2 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds an "Optional extras and submodules — security boundaries" subsection under Important Policies. Enumerates [rl], [yc-bench], and the tinker-atropos submodule as research-only and out-of-scope for any orchestrator default-install path; documents how to opt in deliberately and provides a maintainer check to verify defaults are clean. Mitigation for the two latent CRITICAL findings (CRIT-1 unlicensed tinker-atropos submodule, CRIT-2 unlicensed yc-bench dep) flagged in the 2026-05-05 dependency audit. Closes #2. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a local-only loop that proves the agent stack works against real-shaped tenant emails without wiring SMTP/IMAP, Postgres, or external services. Reads JSON from inbox/, runs P-01 (intent classify) -> P-02 (maintenance triage if applicable) against the canonical UCPM SOP, and writes drafted responses to outbox/drafts/<id>.json plus per-step audit JSONL to audit-log/<id>.jsonl. Audit schema mirrors ucpm.audit_log from the SOP global invariants so future BigQuery loaders can ingest unchanged. Three example messages ship under hermes_agent/loops/sample_emails/ and are also wired in as pytest fixtures: maintenance-hvac (high), rent-question (payment, no triage), emergency-water (emergency + spend gate). Implementation lives in a new hermes_agent.loops package separate from the upstream hermes/hermes_cli modules so it survives upstream rebases. CLI exposed via a new hermes-ucpm console script (kept off the upstream hermes CLI for the same reason). Anthropic calls go through a thin LlmClient wrapper that stamps cache_control on the SOP + company-context system blocks so we don't re-pay for them per message; default model claude-sonnet-4-6, key sourced from Doppler. Tests: 31 unit + e2e tests (pytest), all LLM calls mocked via a fake SDK seam — no API spend in CI. Cross-refs CHG-0001 (orchestrator issue #2) and the canonical SOP in paperclip-UCPM PR #8 (companies/ucpm-default/SOP.md). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
|
Closing — opened against the wrong repo. Will reopen against WanderingStardust79/hermes-agent-ucpm. |
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.
Summary
First real property running (CHG-0002). Adds a local-only file-based loop
that proves the agent stack works against real-shaped tenant emails before
we wire SMTP/IMAP, the Postgres ledger, or the Command Center buttons.
inbox/, runs P-01 (intent classify) then conditionallyP-02 (maintenance triage) against the canonical UCPM SOP, drafts a
response to
outbox/drafts/<id>.json, and emits per-step audit rows toaudit-log/<id>.jsonl. Audit schema mirrorsucpm.audit_logfrom theSOP global invariants so future BigQuery loaders can ingest unchanged.
hermes_agent/loops/sample_emails/andare also wired in as pytest fixtures:
maintenance-hvac,rent-question,emergency-water.in deterministic Python — never via the LLM — so they cannot silently
regress when prompts change.
Implementation notes
hermes_agent.loops/lives separately from upstreamhermes/hermes_cliso it survives upstream rebases without conflicts.hermes-ucpmconsole script (kept off the upstreamhermesCLI forthe same reason). Invocation:
uv run hermes-ucpm test-property-loop ....LlmClientthat stampscache_control: ephemeralon the SOP + company-context system blocks sowe do not re-pay for them per message. Default model
claude-sonnet-4-6. API key sourced from Doppler — no.env.hermes_agent/loops/sample_emails/(notexamples/) because the upstream.gitignoreexcludes anyexamples/directory at any depth.
Cross-refs
paperclip-UCPM-orchestrator).paperclip-UCPMPR Update snapshot id for ipython #8 (companies/ucpm-default/SOP.md).Test plan
uv run pytest tests/ucpm/). All LLM callsare mocked via a fake SDK seam — no API spend in CI.
key (Doppler).
1011-verrado-officecompany-dir once thebranch lands real tenant + state YAML.
ucpm.audit_logwithout column transformation.
Generated with Claude Code