plat-harness
Agent-agnostic control plane for multifamily underwriting and asset operations. The model is rented. Certified numbers come from tools.
git clone <this-repo> plat-harness && cd plat-harness
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
plat-harness ask --metric noi
# → CONFLICT_UNRESOLVED (will not average competing NOI formulas)
plat-harness scoreboard --asset example_property
# → uncertified_empty unless you point env at samples/ops (synthetic data only)
plat-harness underwrite --deal example_garden_style
# → MISSING_MILLAGE (mills per $1,000)
plat-harness underwrite --deal example_garden_style --millage-rate 25.31
# → millage gate passes; CoC/IRR/DSCR/EM/cap are NOT invented
# until you import a Decimal engine extra (see engine/README.md)
The synthetic 80-unit garden-style sample does not invent cash-on-cash.
The certified board is built from synthetic fixtures in samples/ (or from
data you mount with env vars). This repository does not ship anyone's live
deal room.
What this is
| Command | Job |
|---|---|
plat-harness ask |
NL or --metric → tools only. CONFLICT metrics need --context. |
plat-harness scoreboard |
Pipeline tile: certified CoC/occupancy or uncertified_empty. |
plat-harness underwrite --millage-rate |
Deal path. Millage-less runs refuse. |
Occupancy answers must emit occupied, vacant, down, and the denominator.
Missing millage → MISSING_MILLAGE. Missing feed ≠ $0. IRR = CoC * 0.8 is forbidden.
Operator prompts (Spark, Cursor, Codex, Hermes)
This is a CLI, not a Boxscore-style TUI and not a required IDE plugin.
Coding agents and a DGX Spark session (FT Qwen or frontier) drive it by
shelling plat-harness. Paste prompts/SPARK_OPERATOR.md
as the system prompt. Host notes: prompts/HOSTS.md.
Point env at your data on the machine that already holds it. Do not copy OM / rent rolls / ops databases onto a GPU node.
Sequenced product path (generic): docs/ROADMAP.md.
Folder-drop campaign: prompts/DEAL_ROOM_CAMPAIGN.md.
GPU workstation bootstrap: prompts/SPARK_BOOTSTRAP.md.
Install
pip install -e ".[dev]"
pytest
If python3 -m venv is unavailable:
python3 -m pip install --target .deps 'pyyaml>=6.0' 'pytest>=7.0'
PYTHONPATH=harness/src:.deps python3 -m pytest
PYTHONPATH=harness/src:.deps python3 -m plat_harness scoreboard --asset example_property
Point at your data (never commit it here):
export PLAT_HARNESS_OPS_ROOT=/path/to/your/ops/properties
export PLAT_HARNESS_DEAL_ROOT=/path/to/your/deals
export PLAT_HARNESS_BOXSCORE_DB=/path/to/your/ops.db
export PLAT_HARNESS_ENGINE_ROOT=/path/to/your/decimal/engine
export PLAT_HARNESS_GLOSSARY=$PWD/docs/glossary.yaml
To try the synthetic ops sample:
export PLAT_HARNESS_OPS_ROOT=$PWD/samples/ops
plat-harness scoreboard --asset example_property
plat-harness ask --metric physical_occupancy --context ops_actuals --asset example_property
Policy
Hurdles live in policies/default.yaml. The default file is a generic GP
template: coc_hurdle is null until you set it. Copy
policies/examples/cashflow_first.yaml and fill in your Year-1 CoC ratio.
This kernel does not ship a compiled cash-on-cash percentage or a unit-count box.
Engine extra
engine/ in this repo is a path-dep stub. Bring a Decimal run_underwriting
compatible with the harness adapter. See engine/README.md.
What this package will not do
- Invent IRR / CoC / DSCR / EM / cap
- Average CONFLICT glossary rows
- Publish
memo_readywith blockers - Treat MCP
check_deal_feasibilityas the buy-box - Ship live OM / T12 / rent rolls / ops databases
- Depend on
claude-agent-sdk,anthropic, orplat_agent.dispatch.sibling
License
Apache-2.0. See LICENSE and NOTICE.
Running the test suite
Run the tests under a private umask — the storage and acceptance layers
refuse group/world-writable paths by design (fail-closed mode checks on
the artifact root and every ancestor). A default login umask (022/002)
leaves the clone directory itself group-writable and the suite will surface
those refusals as failures. Set the umask before cloning, or chmod the
checkout afterwards:
umask 077
git clone https://github.com/paintbrushv/plat-harness && cd plat-harness
pytest
If an existing checkout was made with a permissive umask:
chmod -R go-w /path/to/plat-harness
(pyproject.toml pins a repo-local basetemp — .pytest-tmp — because
pytest's default /tmp location carries the sticky bit the mode gates
refuse; an explicit --basetemp overrides it if you prefer.)
All host-specific configuration (PLAT_HARNESS_PRIVATE_ROOT,
PLAT_HARNESS_NATIVE_LOCK_DIR, PLAT_HARNESS_SOVEREIGN_HOST/_UID,
PLAT_HARNESS_MODEL_PATH, PLAT_HARNESS_RUNTIME,
PLAT_HARNESS_SITE_PACKAGES) is env-based and fail-closed: unset means
refuse, never fall back to a default path. See docs/INSTALL.md.
Status and honest limitations
plat-harness is a v0.1 research release: a working, model-free control
plane with strict provenance gates — not a certified underwriting product.
- Four-count reconciliation is blocked on real evidence: unit use
classification and independent "down unit" counts require reviewed source
documents. The harness refuses to guess. See
docs/ACCEPTANCE.md. - Real-vendor validation is not claimed. All parser tests use synthetic
fixtures; see
docs/PMS_COMPATIBILITY.mdfor the honest matrix. - Property-tax regimes are researched with statute-tier citations
(
docs/TAX_REGIME_SPEC.md) but require competent human review per jurisdiction before production use. - Engine eligibility is always
not_evaluateduntil separately approved.
Security
See SECURITY.md. Report suspected vulnerabilities privately to the
maintainer address in SECURITY.md; do not open public issues for
exploitable findings.
License
Apache-2.0. See LICENSE and NOTICE.
Release files for plat-harness 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| plat_harness-0.1.0.tar.gz | 523.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plat_harness-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 857.2 kB
Release files / plat_harness-0.1.0.tar.gz
| Download URL | plat_harness-0.1.0.tar.gz |
|---|---|
| Size | 523.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b50d3027a4a84c499e8b420661c2c08f3a9ca9353b13910dc89a2b4ff879a09
|
|
BLAKE2b-256 checksum How to use checksums |
8a16b2c333229274b73ed37be0d89dbc6beb12d091dda535572eb1526b05db6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / plat_harness-0.1.0-py3-none-any.whl
| Download URL | plat_harness-0.1.0-py3-none-any.whl |
|---|---|
| Size | 333.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5365cc4ad7c037b193d36d00b06e73b4c6eb1c22277e78f34e8b72b6325fc392
|
|
BLAKE2b-256 checksum How to use checksums |
22316d27e3e2195b7de904c99ccdb01274bae6da3b310205031c9a77fba3a9f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log