OSS Inventory
OSS Inventory / Version Truth / Upgrade Readiness
This document defines the canonical repo-owned truth for OSS components used by jhf-spindle.
Canonical Sources
- Inventory:
maintenance/oss-inventory.json - Version truth:
maintenance/oss-version-truth.json - Upgrade policy:
maintenance/oss-upgrade-policy.json - ERPNext v16 target truth:
maintenance/erpnext-v16-upgrade-target.json - Verifier:
maintenance/verify_oss_inventory_version_truth.py
The machine-readable truth is fail-closed and includes explicit upgrade-governance fields per relevant runtime family:
current_versiontarget_versionallowed_version_rangepinning_posturecompatibility_window_refpreflight_assertion_refspostdeploy_assertion_refsrollback_contract_refevidence_contract_ref
Every inventory component also declares license, license_class, and
license_evidence_url. The current baseline is deliberately unreviewed:
NOASSERTION / unknown_blocked / https://anyfer.com/legal. A reviewed
classification requires an approved SPDX identifier, a whitespace-free
component-specific evidence URL, and a Fabric decision reference to
JaddaHelpifyr/helpifyr-fabric#1540 or #1541. This is a fail-closed metadata
posture only; it does not approve a component license, redistribution, managed
hosting, public publication, or deployment.
The pinned ERPNext/Frappe major-upgrade target remains explicit and machine-readable even after the repo-owned mainline runtime truth moved to the admitted v16/11.8 lane.
The historical live baseline and conservative patch-train posture (v15.0.0 -> latest stable v15 patch -> pinned v16 target) stay recorded so Host73/Host172 rollout evidence can still prove how the uplift was admitted.
Scope Boundary
jhf-spindle owns the ERP-/Identity-near OSS truth for this repository.
Allowed:
- repo-owned, machine-readable inventory and version truth
- fail-closed drift checks in local verify and CI
- explicit classification of external-owner surfaces
Forbidden:
- local workaround for foreign-owner runtime drift
- shadow truth outside the canonical JSON files listed above
- storing secrets/tokens in docs, evidence, or contracts
Verify Path
Local:
python maintenance/verify_oss_inventory_version_truth.py --output test-results/oss-version-truth.verify.json
The same verifier also validates that maintenance/erpnext-v16-upgrade-target.json:
- stays aligned with the admitted ERPNext/Frappe v16 runtime truth in
maintenance/oss-version-truth.json - keeps the conservative two-hop patch-train for the historical
v15.0.0baseline - pins explicit v16 ERPNext/Frappe targets instead of floating
latest - declares the required Python/Node/MariaDB floors while leaving live Host172 drift fail-closed until deployment closes the DB gate
Optional bounded live check:
python maintenance/verify_oss_inventory_version_truth.py --check-live --ssh-target <internal-runtime-redacted><internal-runtime-redacted> --output artifacts/evidence/oss-version-truth.live.json
CI:
python maintenance/verify_oss_inventory_version_truth.py --output test-results/oss-version-truth.verify.ci.json- smoke test lane also executes:
apps/jhf_spindle_core/tests/test_verify_oss_inventory_version_truth_script.py
Guardrail On Floating Versions
latestand floating refs must fail verification unless owner policy declares an explicit external-owner exception.- missing upgrade-governance fields must fail verification.
- missing, duplicate, malformed, or unsupported legal-review metadata must fail verification.
- Runtime image refs should be digest-pinned (
@sha256:...) or explicit stable tags per policy. - CI action refs must be pinned to approved stable refs per version truth.
- The ERPNext v16 target manifest and admitted repo runtime truth are still not authorization to mutate Host73 or Host172 on their own. Deployment-owned cutover and DB-gate evidence remain mandatory.
License notice: AGPLv3 (GNU Affero General Public License v3.0) Website: https://helpifyr.com