mushanyoung/property-tax-appeal
v3.1.0MIT
Triage US residential property-tax disputes and prepare fact-checked market-value appeals with comparable sales, APNs, and matching Markdown and PDF evidence packets.
Changelog
3.1.0 - 2026-08-19
- Add a root Agent Plugins 1.0 manifest for Cursor and other portable plugin hosts, while retaining the self-contained Codex and Claude plugin distributions and canonical Agent Skill layout.
- Add a unified transparent listing icon and a machine-checked marketplace submission record with starter prompts, five positive cases, three negative cases, capability declarations, stable policy URLs, and US-only availability.
- Publish privacy, terms, support, and security documents that accurately disclose local file generation, host-controlled web research, the absence of an operated case-data backend, and the requirement to keep owner records out of public support channels.
- Prepare ClawHub distribution under the platform-required MIT-0 terms while excluding the repository's MIT license file from only that registry snapshot.
- Extend repository checks to validate portable-plugin metadata, listing assets, policy contracts, marketplace test counts, and cross-manifest version parity.
3.0.0 - 2026-08-19
- Remove all bundled CJK and other font programs from the canonical skill, plugin copy, and release
archives; generate PDFs with unembedded PDF Base 14
HelveticaandHelvetica-Boldonly. - Preserve complete Unicode text in Markdown while making PDF generation fail closed before writing
output when any character is outside the supported WinAnsi glyph set. Diagnostics list the
unsupported Unicode code points and direct the user to an official English spelling or
Markdown-only generation with
--no-pdf. - Require tests to inspect generated PDFs for the absence of
/FontFile,/FontFile2, and/FontFile3, and replace CJK rendering tests with Unicode-preservation and safe-rejection tests. - Set the v3 CPython support lifecycle to 3.11 through 3.14 and test every supported minor version on each pull request, branch push, and release. Python 3.14 additionally runs coverage, security, repository checks, and the PDF smoke test. No weekly compatibility matrix or 3.15 development job is added.
- Compile runtime, test, and security dependency locks with
uv pip compile --universal, retain hash-locked installation, and runpip checkon every supported CI version. - Retire the immutable v2 release and tag, rewrite reachable history to remove both historical
assets/fonts/trees, and prune the deprecated TTF blob so new clones do not download it. Add a full-history CI guard that rejects future font-program commits even when a later commit deletes the working-tree file.
2.0.0 - 2026-08-19
- Replace ambiguous v1 assessment fields with an explicit v2 sales-comparison basis and sourced notice-value graph for ratios, caps, equalization, exemptions, classifications, and authority-specific taxable values.
- Require a complete research ledger and a separate admissible neutral valuation pool before applying an optional advocacy-table price ceiling; equally or more relevant admissible omitted evidence requires automatic disclosure, while inadmissible transfers cannot affect valuation arithmetic.
- Enforce directed source/target semantics, including full-cash/limited/assessed value chains, and non-increasing requested values, caps, classifications, exemptions, and authority-specific reductions across notice-value transformations and bounded numeric inputs.
- Require fact-supported inadmissibility reasons so higher admissible sales cannot be hidden by relabeling; duplicate records must match an earlier stable transaction ID and exact transaction facts, while reason-specific source roles prevent irrelevant citations.
- Define an explicit market-value appeal scope and fail closed for unequal/non-uniform appraisal, exemption, classification, ownership, and other disputes requiring different evidence models.
- Keep the skill discoverable for non-market dispute triage while prohibiting packet generation,
and require a parcel-sourced
verified_residentialuse classification for every built packet. - Make nested JSON validation type-total, require exact date and enum types, and propagate unknown requested values through every mechanical notice-value derivation.
- Bound raw case input by size and nesting depth, return traceback-free parser errors, and validate falsey optional scalar fields by presence and exact type.
- Generate interval-safe prose, tables, and statistics in both formats; both range endpoints and the price-per-square-foot interval are shown, and provisional endpoints never enter point aggregates.
- Require explicit owner approval for declarations and signature blocks.
- Add typed source roles, route cross-checks, current-rule attestations, duplicate-key rejection, and text/URL injection defenses including deterministic IANA special-use tables, canonical path escapes, and IDNA-canonical public-unicast authority checks.
- Add a locator-free
owner_attachmentsource kind for private assessment notices, marketability evidence, and owner-provided transaction records, with null URLs, restricted roles, mandatory separate public parcel support, strict fields, and matching Markdown/PDF disclosure. - Reject normalized URI, signed-link, bare-host, POSIX, Windows, UNC, and encoded locator forms in every output-bearing free-text field; reject unknown fields throughout the case schema and Unicode surrogates before generation.
- Decode locator candidates to stability under a fixed work budget and fail closed on exhaustion; canonicalize transaction identity to whole-dollar prices so visually identical duplicate sales cannot bias neutral-pool statistics.
- Cap schema collections and validation diagnostics, enforce a maximum of 20 selected and 100 rejected candidates, and index transaction fingerprints for linear-time duplicate detection.
- Pin registry link-check connections to a single validated DNS result, preserve TLS SNI and HTTP authority, verify the connected peer, and repeat the boundary on every redirect to prevent DNS rebinding between validation and transport.
- Require every external GitHub Action to use a full 40-character commit SHA in repository checks, backed by GitHub's repository-level SHA-pinning policy.
- Embed a digest-verified OFL-licensed CJK TrueType font with fail-closed glyph checks and test actual PDF font streams; keep Markdown/PDF source support text and owner fields in parity while suppressing owner names from PDF metadata.
- Make equal-score best-comparable disclosure presentation-order independent, and split the fail-closed user template from the fully verified fictional test example.
- Create private no-clobber failure-atomic output with path-component symbolic-link rejection.
- Package tracked files only, hard-fail on untracked package inputs, smoke-test each extracted runtime archive, and reject environment files, credential-like files, and symbolic links; include the packaging implementation itself in dirty-source provenance checks.
- Compare release inputs directly with
HEADand the Git index, reject index concealment flags, and stage release assets before exclusive no-clobber installation. - Generate byte-reproducible PDFs using ReportLab invariant mode.
- Add release tag/version validation, dirty-input provenance rejection, normalized archive modes, immutable checksummed and attested archives with licenses, hash-pinned dependencies, clean Python 3.10-3.12 lock installation, CI-enforced security tooling, commit-pinned GitHub Actions, version-pinned installers, registry source audit metadata, and scheduled link checks that fail when too few URLs receive real responses.
- Require release-tag commits to be reachable from
mainand repeat the complete Python 3.10-3.12, security, coverage, repository, and PDF smoke-test gates before publishing any release assets. - Expand adversarial, ratio-state, rendering, packaging, release, and repository-contract tests.
1.0.0 - 2026-08-18
- Publish the evidence-led property-tax appeal workflow as an Agent Skill.
- Add nationwide routing for all 50 states and the District of Columbia, with common informal-review, protest, grievance, abatement, equalization-board, and tribunal document modes.
- Add validation for state routing, official-form requirements, filing guidance, and sourced legal comparable-sale windows.
- Add Codex and Claude plugin marketplaces, a Gemini CLI extension manifest, and portable Agent Skills installation paths.
- Add deterministic skill and plugin release packages.