fresh-tipsy
A public, tested Python package for reading TIPSY and FAN$IER data tables, exposing growth, product-recovery, and economics workflows, and preserving the provenance of every value.
fresh-tipsy is a reimplementation and interoperability layer. It does not
claim authorship of TIPSY, FAN$IER, TASS, FEMIC, or BC government data. It exists
so those models and tables can be queried from Python, tested in the open, and
used by tools such as FEMIC without a GUI boundary.
Repository: https://github.com/UBC-FRESH/fresh-tipsy
Status
Version 0.1.0 was released on 2026-11-09.
ROADMAP.md and GitHub issues carry the live status. The package is an
interoperability layer over precomputed TASS/TIPSY tables, not a TASS rewrite.
Features
.tab/.tafparsers, provenance manifests, catalog, and normalization.- Typed growth queries over precomputed TASS/TIPSY tables, with interpolation, metrics, source SHA-256, and explicit unavailable metrics.
- Product recovery for lumber, residues, log grades, graded/degraded lumber, and industrial logs, with strict mass-balance checks.
- Explicit-input product economics: prices, costs, NPV, Faustmann site value, and FAN$IER-style sensitivity cases.
- Typer CLI:
db,curve,product, andeconcommands with JSON output. - FastAPI service and Pydantic response envelopes.
- Server-rendered FRESH-style catalog, curve, product, and economics UI.
- Deterministic assistant tools with provenance-first prompt guidance.
- Optional FEMIC adapter with package-version and data-manifest provenance.
What this is not
- A claim that UBC-FRESH invented TIPSY, FAN$IER, or FEMIC.
- A byte-for-byte reimplementation of TASS.
- A substitute for measured BC log grades or mill-specific recovery.
- A place to commit raw government data tables, credentials, or personal paths.
- A validated FAN$IER replacement.
Install
From a source checkout:
python -m venv .venv
. .venv/bin/activate
python -m pip install -e ".[api,parquet]"
python scripts/dashboard.py
fresh-tipsy --help
Extras:
api: FastAPI, Jinja2, and uvicorn for the HTTP API and web UI.parquet: PyArrow for Parquet normalization anddb extract.- The minimal install supports parsing, catalog, curve, product, and economics commands that do not need Parquet or the API.
Download the wheel, sdist, or HTML docs archive from the 0.1.0 GitHub release.
Build evidence is in notes/reference/package-build.md.
Quick start
Set the local source roots:
export TIPSY_INSTALL="/path/to/tipsy"
export TIPSY_DATABASE="$TIPSY_INSTALL/Database"
export FRESH_TIPSY_CACHE="/path/to/fresh-tipsy-cache"
Extract a catalog from a local licensed install:
fresh-tipsy db extract --source "$TIPSY_INSTALL" --out "$FRESH_TIPSY_CACHE"
fresh-tipsy db validate --catalog "$FRESH_TIPSY_CACHE/manifest.json" --source "$TIPSY_INSTALL"
Query growth, products, and economics:
fresh-tipsy curve query --catalog "$FRESH_TIPSY_CACHE/manifest.json" \
--source "$TIPSY_INSTALL" --species PLI --site-index 20 --age 80 --pnc N --json
fresh-tipsy product recover --catalog "$FRESH_TIPSY_CACHE/manifest.json" \
--source "$TIPSY_INSTALL" --species PLI --site-index 20 --age 80 --pnc N --json
fresh-tipsy econ run --catalog "$FRESH_TIPSY_CACHE/manifest.json" \
--source "$TIPSY_INSTALL" --scenario scenario.json --json
The scenario schema and exit codes are in
notes/reference/cli.md. The API and web UI are in
notes/reference/api.md and
notes/reference/web.md.
Validation and evidence
- Four-species TIPSY golden regression: PLI, FDC, AT, and FDI exact ages plus
product mass balance. See
notes/reference/release-validation.md. - Hand-checked economics case: NPV 335.543289 CAD/ha and site value 546.081251
CAD/ha for the documented inputs. See
notes/reference/economics.md. - Cross-interface parity for CLI, API, web, and assistant tools.
- 376 tests passed and 13 skipped at the last preparation run; combined branch coverage 95.5%.
- Real-source tests skip when
TIPSY_DATABASEis unset; a skip is not a pass.
Known gaps
The release is deliberately explicit about missing evidence:
- TIPSY custom runtime output is unavailable under Wine.
- FAN$IER price, cost, product-suite, and NPV tables are unparsed.
- FEMIC TSR output is not captured.
- Product aggregate totals are not stored in
.taf; aggregate checks are derived, with an independent #2 & Better-to-graded cross-check. - Residue totals are absent.
- Carbon conversion is unavailable.
- No measured BC field grade or mill-specific recovery is claimed.
- FEMIC adapter call and dependency are prepared but not applied to the FEMIC repository.
- Wheel/sdist are prepared but not published.
See notes/reference/known-gaps.md for the full
list and limits.
Citation
Cite the package, the source model, and the specific table path and SHA-256. Raw data is not relicensed by this package.
Release notes
Repository map
| Path | Purpose |
|---|---|
AGENTS.md |
Operating contract for coding agents |
HANDOFF.md |
First-read handoff note for a new session agent |
ROADMAP.md |
Plan of record and issue tracker map |
CHANGE_LOG.md |
Dated narrative of changes |
RELEASE_NOTES.md |
0.1.0 release notes and known gaps |
notes/plan/ |
Program, data, architecture, and validation plans |
notes/reference/ |
Source inventory, schemas, validation, and release facts |
notes/adr/ |
Accepted design decisions |
docs/ |
Sphinx RTFM surface |
scripts/check_workflow.py |
Workflow validator |
scripts/check_release_assets.py |
Release asset and checksum validator |
tests/ |
pytest suite, including interface and release checks |
License and attribution
Code is MIT licensed. Data tables and model outputs retain their original BC government attribution. Cite the source model and table, not only this package. No source table, normalized asset, or model output is relicensed here.
Metadata
Release files for fresh-tipsy 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 | Provenance | Actions |
|---|---|---|---|---|
| fresh_tipsy-0.1.0.tar.gz | 124.7 kB | With provenance | Details for fresh_tipsy-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fresh_tipsy-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for fresh_tipsy-0.1.0-py3-none-any.whl |
Total release size: 216.5 kB
Release files / fresh_tipsy-0.1.0.tar.gz
| Download URL | fresh_tipsy-0.1.0.tar.gz |
|---|---|
| Size | 124.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6be34d45c727f5dc91e13c916db5572b54b29f20621488e0c7628c6908e3c05a
|
|
BLAKE2b-256 checksum How to use checksums |
4c20c84d115d4998b42af6579bab49a9ce54e5b1381048480061b2ff7bf26b80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 9, 2026.
Transparency logRelease files / fresh_tipsy-0.1.0-py3-none-any.whl
| Download URL | fresh_tipsy-0.1.0-py3-none-any.whl |
|---|---|
| Size | 91.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b7cbf023356334121afb7c3514a990bb84dec5d8b30c85c1a6add2db5361b8ca
|
|
BLAKE2b-256 checksum How to use checksums |
19282a7a60bc39c3dfbadb13a65e911ccb3403f1954732dc5dc093a823f5158f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 9, 2026.
Transparency logSecurity for fresh-tipsy 0.1.0
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for fresh_tipsy-0.1.0.tar.gz
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 Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.