task_ci_failures worker evidence¶
Task: d989f9b4-c33d-4eb9-9f31-9ba18bee63e3, frozen version 2.
Execution: 9c417f98-6e3a-46f2-a552-cf6a8a40f79a.
Repository: h8v6/heyaira; branch: heyaira/d989f9b4.
Source and starting HEAD: d8b5b7482aff723abb0e00ea0fad228838edbf07.
The starting worktree was clean; no carried candidate or unrelated changes.
No subagents were used. No installation, push, PR, merge or deployment.
The RESULT receipt records the resulting commit SHA and post-commit checks.
Change and confidence¶
CI correction feedback previously contained run metadata but no way for the assigned execution to read failing tests. This change adds a read-only, project/task-scoped MCP tool, bounded GitHub job/log reads, fixed-pattern extraction with whole-line secret checks before truncation, and a rendered correction hint. Publication history remains readable after actual send-back. No correction budget, timing, notification, migration or database-write behavior was changed. Confidence is supported by real PostgreSQL and authenticated MCP tests, with synthetic provider responses and no sockets for log-download transport tests.
Tests in the change area use the existing ASGI fixture option, and signed
webhook requests use ASGI with the real app lifespan. They retain real MCP,
authentication, HTTP route, workflow and PostgreSQL behavior without requiring
listening sockets. The separate smoke script test retains its socket coverage.
scripts/test_postgres.py is unchanged.
Environment and commands¶
Working directory for the commands below:
/Users/jablonskib/HeyAira-agents/.heyaira-worktrees/heyaira/d989f9b4-worker.
Python: 3.12.7; pytest: 9.1.1. A prepared PostgreSQL admin capability was
present; the unchanged runner created and removed isolated databases.
TMPDIR="$PWD/.heyaira/task-tmp" was used for test/Git temporary files.
No credential or database URL is recorded here.
Git commands used /Applications/Xcode.app/Contents/Developer/usr/bin/git
directly: the /usr/bin/git shim emitted denied xcrun cache writes outside
the workspace. The direct binary and workspace TMPDIR succeeded.
Before edits, server_identity({}) initially returned HTTP 502. Its retry
succeeded and matched the supplied resource, instance, project and execution.
task_get(task_id, version=2) succeeded before implementation. The Bridge
exception in the work contract excludes interactive claiming/status changes.
The implementation-tree runs below preceded the local commit; the same required checks were then run on committed HEAD and recorded in RESULT.
K1¶
criterion_id: K1 outcome: pass evidence_path: docs/reports/task-ci-failures-evidence.md feedback: Focused real-PostgreSQL tests exit 0 on the implementation; all 24 new tests fail on the isolated source archive, exit 1, for absent functionality.
Command:
python scripts/test_postgres.py tests/test_ci_failures.py tests/test_task_ci_failures.py -p no:cacheprovider
Actual result, exit 0:
........................ [100%]
24 passed in 7.56s
postgres_acceptance=passed: selected tests, zero skipped tests
An isolated archive was created with git archive -o
.heyaira/task-tmp/base.tar d8b5b7482aff723abb0e00ea0fad228838edbf07, unpacked
into .heyaira/task-tmp/base, and only the two new test files were copied
into its tests/. Its runner selects the archive's source via PYTHONPATH and
runs pytest with the archive as its working directory.
Command:
python .heyaira/task-tmp/base/scripts/test_postgres.py tests/test_ci_failures.py tests/test_task_ci_failures.py -p no:cacheprovider
Actual result: exit 1, 24 failed in 7.01s, no skipped tests.
| Coverage | Implementation | Isolated d8b5b74 | Observed base failure |
|---|---|---|---|
| C1 | 1 passed | 1 failed | ModuleNotFoundError: heyaira.ci_failures |
| C2 | 1 passed | 1 failed | ModuleNotFoundError: heyaira.ci_failures |
| C3 | 15 passed | 15 failed | GitHubContentsProvider lacks job_log_tail/list_run_jobs |
| C4 | 6 passed | 6 failed | Unknown tool: task_ci_failures |
| C5 | 1 passed | 1 failed | KeyError: details_tool |
C3 runs the production opener and redirect handler, replacing only the HTTPSHandler transport. It checks exact allowed redirect URL, fresh headers, one hop, unsafe destinations, range validation, 4 MiB + one sentinel byte read bound, and partial-line removal. C4 compares row counts of 14 touched tables around every tool read, exercises actual CI send-back, latest run selection, origin/SHA filtering, missing publication/binding/provider, and live-version worker/verifier credentials including same-project task mismatch.
K2¶
criterion_id: K2 outcome: pass evidence_path: docs/reports/task-ci-failures-evidence.md feedback: Required change-area runner exit 0, 121 passed and zero skipped; separate smoke run exit 0 with one explicitly listed skip and no failures/errors; runner unchanged.
Command:
python scripts/test_postgres.py tests/test_ci_failures.py tests/test_task_ci_failures.py tests/test_task_ci.py tests/test_ci_correction.py tests/test_notification_docs_contract.py tests/test_docs_contract.py -p no:cacheprovider
Actual result, exit 0:
........................................................................ [ 59%]
................................................. [100%]
121 passed in 66.38s (0:01:06)
postgres_acceptance=passed: selected tests, zero skipped tests
The first bare python -m pytest tests/test_bind_smoke_scripts.py -p
no:cacheprovider -rs invocation exited 2 during collection:
ModuleNotFoundError: No module named 'heyaira'. The source package is not
installed in this environment. Rerun with the repository source path:
PYTHONPATH=src python -m pytest tests/test_bind_smoke_scripts.py -p no:cacheprovider -rs
Actual result: exit 0, zero failures/errors, one skip:
SKIPPED [1] tests/test_bind_smoke_scripts.py:50: set HEYAIRA_BIND_SCRIPTS_DATABASE_URL for isolated script E2E
1 skipped in 1.27s
Additional focused check:
PYTHONPATH=src python -m pytest tests/test_git_provider.py tests/test_mcp_runtime_contract.py -p no:cacheprovider
Actual result: exit 0, 30 passed in 1.92s, zero skips.
K3¶
criterion_id: K3 outcome: pass evidence_path: docs/reports/task-ci-failures-evidence.md feedback: Export and documentation contract checks exit 0; git diff --check exits 0 with no whitespace errors.
PYTHONPATH=src python scripts/export_mcp_contract.py --check
# exit 0: MCP contract is up to date
PYTHONPATH=src python scripts/check_docs_contract.py
# exit 0: documentation contract passed: 49 MCP tools covered
git diff --check
# exit 0: no output
The tool is registered in the MCP contract, documentation table, served GET /docs catalogue, both smoke registries and the Bridge delivery skill.
K4¶
criterion_id: K4 outcome: pass evidence_path: docs/reports/task-ci-failures-evidence.md feedback: Source is an ancestor; only authorized src/tests/docs/contracts/scripts paths changed; migrations and scripts/test_postgres.py unchanged.
git merge-base --is-ancestor d8b5b7482aff723abb0e00ea0fad228838edbf07 HEAD
# exit 0: no output
git diff --exit-code d8b5b74 -- scripts/test_postgres.py migrations
# exit 0: no output
The post-commit git diff --name-only d8b5b74..HEAD path list is:
contracts/mcp-tools.json
docs/agents/skills/deliver-bridge-task/SKILL.md
docs/reference/mcp-tools.md
docs/reports/task-ci-failures-evidence.md
scripts/multi_client_smoke.py
scripts/smoke_mcp.py
src/heyaira/ci_failures.py
src/heyaira/git_provider.py
src/heyaira/server.py
src/heyaira/workflow.py
tests/test_ci_correction.py
tests/test_ci_failures.py
tests/test_server_checks.py
tests/test_task_ci.py
tests/test_task_ci_failures.py
Development runs and remaining checks¶
The initial unchanged-base run also failed all 24 tests (exit 1,
24 failed in 7.65s). Intermediate implementation runs exited 1 with
14 failures/10 passes, then 2 failures/22 passes. These exposed the default
urllib redirect-body drain, a synthetic PR fixture missing html_url, the
automatically generated Host header, and use of /mcp instead of an execution
token's issued project resource. All were corrected and the focused tests
passed before the final runs above.
The first change-area run exited 1 with 3 failures/118 passes; the additional
failure identified the missing served GET /docs catalogue entry. The final
change-area run passed all 121 tests after it was added.
Full suite: not run, as the frozen task assigns full-suite judgment to CI. Live GitHub downloads and socket smoke E2E: not claimed verified; providers and HTTPS transport are synthetic, and the smoke test's skip is listed above. Independent acceptance and publication remain with Bridge and its verifier.