Repository navigation
Releases: SebasBarrera/harness-engineering
Release list
v1.0.0
Changes since v0.9.0
Features
- memory: record why a record did not enter a context
26b508b - cli: add memory add, list, approve and invalidate
b07774b - agents: pass the selected memory to the agent provider
18b7aea(#6) - retrospective: record the decision on a recommendation
970fa8e - agents: record the usage a command provider reports
4d371bd - cli: show the context manifest recorded for a run
1756c95
Fixes
- memory: use the public contract field names in the context manifest
7477a05 - benchmark: isolate the scenario fixture from the user's Git configuration
23639ff - evaluation: count test modules by name when reporting deliveries without tests
a8af6c2
Documentation
- evaluation: summarize the controlled evaluation of v0.9.0
5645b58 - describe memory, recommendation decisions and reported usage
01d1c7f - evaluation: describe every evaluation block and its result files
cde0a86
Tests
- evaluation: add the evaluation scenarios, tasks and hidden tests
816e8e1 - evaluation: add the agent adapter, orchestrator and measurement
ee7e17c - evaluation: add fault-injection probes and the post-hoc review
beaa14a - evaluation: add the report and the results of the v0.9.0 evaluation
7a8078c - evaluation: add a Codex CLI backend to the controlled evaluation
e3e2c2a - evaluation: add minimal and casual prompt levels
3f62818 - evaluation: report prompt levels and the Codex block
4d8c7df - evaluation: add Codex, minimal-prompt and casual-prompt results
9383a01 - evaluation: add a longitudinal iterative-development experiment
238657d - evaluation: report import failures to the longitudinal oracle user
a3cc17a - evaluation: summarize the longitudinal sessions
fece7b4 - evaluation: add the longitudinal experiment results
e08081a - stop the repaired-baseline test from reusing stale bytecode
895b892 - demo: add the memory, recommendation and usage flow
daf1b49 - evaluation: publish phase durations and retrospective recommendations
be0db22 - configuration: cover the locked retrospective policy
1ea0c6b
Style
- benchmark: drop the extra blank line after the import block
0b08c94
Maintenance
- security: allow the fictitious password of an evaluation test
5d9033c - release: prepare 1.0.0
feaf6e1
Issues closed
Verification
sha256sum -c SHA256SUMS
gh attestation verify governed_agent_harness-1.0.0-py3-none-any.whl --repo SebasBarrera/harness-engineeringv0.9.0
Changes since v0.8.1
Fixes
- validators: block a mandatory validator whose Python module is missing
c904abe(#1) - gates: consolidate only the latest attempt of each validator
6134e30(#2) - runtime: bound process output while reading it
a43f20d(#9) - capabilities: accept workspace paths reached through a symlinked ancestor
69e0437(#19) - application: reject task files with missing fields or unknown keys
5947bb2(#29) - cli: print camelCase keys from gate decide
db5e6de(#30) - evidence: write artifacts on platforms without os.fchmod
442406e - runtime: resolve .cmd executables such as npm on Windows
b6e3106
Documentation
- monitoring: Scorecard runs on develop
46070cc - ship the full Apache-2.0 license text
9d3eb37 - readme: add SonarQube Cloud badges
3e89163 - brownfield: the itsdangerous case closes with a plain APPROVE
f6827f9 - describe the 0.9.0 behavior and its difference with the thesis cut
6600713
Tests
- update the demonstration flows to the latest-attempt gate
74054b3
Build and packaging
- deps-dev: update mypy requirement from <2,>=1.11 to >=1.11,<3
e745078
CI/CD
- scorecard: run on the default branch
b0d382e - windows: run the documented flows and drop the informational label
a024f7f(#31)
Maintenance
- release: prepare 0.9.0
e1ae4b6
Issues closed
#1, #2, #9, #19, #29, #30, #31
Verification
sha256sum -c SHA256SUMS
gh attestation verify governed_agent_harness-0.9.0-py3-none-any.whl --repo SebasBarrera/harness-engineeringv0.8.1
Changes since v0.8.0
Features
- benchmark: add a self-contained HTML benchmark report
ccf2b82 - telemetry: add a self-contained HTML process-metrics report
f9afa03
Security
- storage: document the Bandit B608 false positive in list_dicts
3414d66 - docker: harden the container image
02f23c0(#16)
Refactoring (no behavior change)
- declare explicit re-exports in package modules
96ef870(#22) - apply reviewed Ruff fixes
a21cbd5 - cli: resolve the --path default at invocation time
aae805f(#24) - agents: type the provider context as a read-only protocol
d24bfb3 - orchestration: make the run engine pass mypy --strict
075a454 - add the missing annotations reported by mypy --strict
df4a0e0 - runtime: drop the type: ignore comments in the workspace diff
2e97ded(#25)
Documentation
- cli: add help texts to every command and option
faa6b29(#14) - generate the CLI reference from the command tree
6e15d23 - generate the task-file reference from the JSON Schema
3ca5e1f - document every exit code, including 3 and 5
9b04099(#11) - add the configuration and API references
a4e71da - add the greenfield guide with outputs from a real run
fa49999 - add the brownfield guide and the itsdangerous reproduction kit
1ee4d88 - add the external agents guide
1db75ff - add the CI integration guide
802e390 - document the harness telemetry metrics
fa7f9b3 - document where each repository health signal is observed
187ad43 - document the benchmarks and their limits
8dd012e - record how the provenance of the thesis cut is established
a5aeea2 - adr: record the repository topology decision
edd8375 - add the thesis context page
eae6781 - diagrams: show the local API and dashboard as implemented
026ba0e - add the MkDocs Material documentation site
bfb4452 - security: add the vulnerability reporting policy
9334346 - adopt the Contributor Covenant 2.1 code of conduct
54da8a6 - expand the contributing guide
9e98bbb - security: nest the security model under the policy heading
e0ee522 - add support routes and code owners
3786bcf - add issue forms and the pull-request template
299a388 - add CITATION.cff
d4a75ce - add CLAUDE.md with the repository conventions
57fbac4 - rewrite the README
800bbe0 - add the Spanish README
8dfeac3 - list Windows as unsupported and all lint jobs as blocking
576099c
Tests
- isolate fixture repositories from the developer's Git config
bce4b41(#20) - evidence: build the fake GitHub token at runtime
7c291ad(#17) - add a runner that reproduces the thesis demonstration flows
dd8168c - make the quickstart flow run the README commands verbatim
99280a3
Build and packaging
- ship py.typed marker with the package
ed059da(#10) - use python -m build instead of setup.py sdist bdist_wheel
c0aa3f9(#26) - add PyYAML and jsonschema type stubs to the dev extra
54edfd0 - generate release notes from Conventional Commits
65d00cd - publish the real project metadata
a6855f7
CI/CD
- add security workflow
0cd9a11 - security: upgrade pip in the dependency-audit environment
339c494 - add build workflow
0cff9b8 - build: count runtime dependencies without pip and the harness
9ed1e45 - replace the original test workflow with a hardened one
b5081d6(#15) - add lint workflow
9d82994 - group step-summary writes in the test job (shellcheck SC2129)
55c3202 - add CodeQL analysis for Python, JavaScript and Actions
3ef6bc4 - add dependency review for pull requests
ebf00f5 - add OpenSSF Scorecard analysis
e1789ea - configure Dependabot for pip, GitHub Actions and Docker
07fdf75 - add pull-request hygiene checks
ceeaf24 - add stale workflow
c2521e7 - add weekly link checking with lychee
80b52b8 - add SonarQube Cloud analysis with coverage
903348e - add container build, scan and GHCR publication
f94d3d5 - add the release workflow with SBOM and build provenance
744c765 - add the benchmarks workflow with a non-blocking trend history
9658538 - lint: accept python/* YAML tags without constructing them
6574229 - build and deploy the documentation site with its reports
ec65b17 - add the docs-smoke workflow
fe9b1f0 - make Ruff, mypy, markdownlint and hadolint blocking
141ed8f - move the Windows run to its own informational workflow
bca3ba5 - benchmarks: install pytest for the scenario benchmark
d87784c
Style
- apply Ruff safe fixes
bf3dfb9 - apply ruff format to src, tests and scripts
966a221 - make every Markdown file pass markdownlint
2a13fa9
Maintenance
- lint: treat typer.Option and typer.Argument as immutable calls
8873db1(#23) - ignore the maintainer's local workspace and generated reports
a5cc040 - ignore the formatting commit in git blame
2aec842 - remove the stale static web prototype
ebebac2(#12) - stop versioning generated reports and stale manifests
62f6065(#13) - add pre-commit hooks
3c2a0f7 - tidy comments in the Sonar configuration and the denylist
4613775 - release: prepare 0.8.1
ba4fe33
Issues closed
#10, #11, #12, #13, #14, #15, #16, #17, #20, #22, #23, #24, #25, #26
Verification
sha256sum -c SHA256SUMS
gh attestation verify governed_agent_harness-0.8.1-py3-none-any.whl --repo SebasBarrera/harness-engineeringv0.8.0 — thesis artifact (byte-faithful cut)
Governed Agent Harness 0.8.0: the cut evaluated in the thesis.
This release is the byte-faithful import of the research artifact designed, implemented and evaluated in the master's thesis Diseño y evaluación de una arquitectura de harness engineering para el desarrollo de software asistido por inteligencia artificial, con supervisión humana y retrospectiva basada en evidencia (Juan Sebastián Barrera Pulido, Maestría en Informática, Escuela Colombiana de Ingeniería Julio Garavito). It reproduces the evaluated cut exactly. It is not a new version of the software.
Warning
The wheel and sdist attached here are the original binaries of the thesis cut. This repository's CI did not build them, so they carry no build-provenance attestation. Attested, SBOM-backed artifacts start with v0.8.1. Verify these files with SHA256SUMS.
Provenance
| Item | Value |
|---|---|
| Cut | governed-agent-harness-0_8_0-current.zip |
| ZIP SHA-256 recorded in the thesis | 7e1401ad9f324a9e9fe488b5eb4d9c842f3f8ec52ec7340e5913813440b4d0cd |
| Files in the cut | 236 (macOS .DS_Store metadata excluded) |
| Versioned in Git | 232, byte-identical to the cut (scripts/verify_provenance.py full → matched: 232/232, mismatched: 0, missing: 0) |
| Attached instead of versioned | dist/governed_agent_harness-0.8.0-py3-none-any.whl, dist/governed_agent_harness-0.8.0.tar.gz, .coverage.release (published as coverage.release.sqlite). dist/.gitignore is a 1-byte file and is not versioned. |
| Reference manifest | provenance/v0.8.0.sha256 (also attached as provenance-v0.8.0.sha256) |
The ZIP archive itself was no longer available when the repository was published, so its SHA-256 could not be recomputed. Fidelity is anchored to the per-file manifest of the extracted cut. Every import step was checked against that manifest in CI.
The tag also contains repository infrastructure added around the cut. None of it modifies a file of the cut: .gitattributes, .editorconfig, provenance/, scripts/verify_provenance.py, scripts/check_denylist.py, .github/privacy-denylist.txt and .github/workflows/import-ci.yml. The original .github/workflows/ci.yml is kept byte-identical and is disabled through the Actions API (#15).
MANIFEST.sha256 is attached as shipped in the cut. It is stale: 51 of its 88 entries do not match the files (#13).
Snapshot evaluated in the thesis
The thesis author reported these figures for this cut. The last column shows what was re-verified while publishing this repository. These figures describe the frozen cut, not the current state of develop; the CI badges show that.
| Fact | Thesis value | Re-verified during publication |
|---|---|---|
Python modules in src/governed_harness |
74 modules, 6,746 lines | 74 source files (mypy count) |
| JSON Schema contracts | 25 | 25 files in schemas/v1 |
| CLI commands | 21 | 21 (command tree introspection) |
| API routes | 9: seven queries, one decision POST, dashboard at / |
9 routes in api/app.py |
| Tests | 86: core 79, E2E Python 4, E2E Node 1, performance 2 | 86 pass; core families 79 |
| Full suite in one process | exit 0 in three runs, 19–21 s | exit 0 in three runs, 16–20 s (macOS, Python 3.12.11); green in CI on CPython 3.12/3.13/3.14 |
| Core coverage | lines 77.48 %, branches 59.29 %, 3,268 statements | not recomputed for this release |
| Ruff | 140 findings in src, 11 in tests (0.16.5); 60 F401, 40 B008 |
identical counts with ruff 0.16.7 |
| Mypy strict | package mode blocked by the missing py.typed; 54 errors in 15 files on sources, 34 attr-defined |
55 errors in 15 files with mypy 1.20.2 |
| Wheel in a clean environment | 18 dependencies; harness runs |
18 dependencies (25 with [api]); harness --help exits 0 |
| Governed-process overhead | 10.09 % and 11.23 % in two runs, about 1.2 ms | microbenchmarks are published from v0.8.1 onwards |
| Exit codes | 0, 1, 2, 3, 4, 5, 6, 130 | 3 (not found) and 5 (stale approval) reproduced with the original wheel |
| Brownfield case | pallets/itsdangerous 2.2.0, tarball SHA-256 7b0c6d41…37f2b, baseline broken by missing freezegun, 298 tests after installing it, ChangeSet digest invariant |
reproduced: GitHub tag archive SHA-256 matches; 298 passed; digest sha256:e775aa2d…23d46 unchanged; APPROVE exit 5, APPROVE_EXCEPTION exit 0; 46 events, chain valid |
Known limitations and defects
The harness is a research beta. It is not a sandbox: an authorized process keeps the file-system, network, CPU and memory permissions of the OS user. The local web dashboard has no authentication and must stay on loopback (#18).
Behavioral defects are kept unfixed so that this cut stays identical to what the thesis measured. They are tracked in the milestone backlog — thesis-impact:
- #1: a mandatory validator whose Python module is missing yields
FAILED/HIGH instead ofBLOCKED. - #2: the gate stays
FAILEDafter a passing retry when the ChangeSet digest does not change (needs-decision). - #3: workflow YAML phase settings are persisted and digested but not enforced.
- #4: capabilities are resolved per run and actor, not per phase.
- #5:
allowNetwork,repositoryContentTrustedanddestructiveActionsDefaultare declared but not enforced. - #6: memory store: no production path creates records, exclusions go unrecorded, supersession depends on order.
- #7:
PREEXISTING_ERRORandINTRODUCED_ERRORare never assigned. - #8:
PLANNINGdeclaresapproval.request, but no checkpoint is wired. - #9: the process runner truncates output only after buffering all of it.
- #19:
contained_pathrejects absolute paths under a symlinked ancestor (macOS/var).
Quality and infrastructure items are addressed in v0.8.1: #10–#17, #20, #22–#26.
Assets
| File | Description |
|---|---|
governed_agent_harness-0.8.0-py3-none-any.whl |
Original wheel of the cut |
governed_agent_harness-0.8.0.tar.gz |
Original sdist of the cut |
coverage.release.sqlite |
Original .coverage.release coverage database of the cut |
MANIFEST.sha256 |
Original integrity manifest, stale (#13) |
provenance-v0.8.0.sha256 |
Per-file SHA-256 manifest of the extracted cut, the provenance reference |
SHA256SUMS |
SHA-256 of all of the above |
To verify the binaries:
sha256sum -c SHA256SUMSTo verify a checkout of this tag:
git checkout v0.8.0
python3 scripts/verify_provenance.py full