Shared preset-backed automation core for the unu product family
Project description
unuforge
Shared preset-backed automation core for the unu product family.
What This Repo Owns
- preset schema and normalization
- the machine-facing CLI
- profile and action dispatch contracts
- host-adapter integration boundaries
What It Does Not Own
- product-specific manifests and release scripts
- product-specific business-domain logic
- host repository runtime internals
- portfolio governance responsibilities owned by
unuOS
For repo-local positioning and admission rules, see
docs/superpowers/specs/2026-03-20-unuforge-positioning-guardrails-design.md.
Source Of Truth
- this README for contributor-facing repo overview and verification entrypoints
docs/releasing.mdfor maintainer release and publishing requirementsdocs/release-policy.mdfor maintainer versioning, manual merge gate, and upgrade-notice policydocs/maintainer-status.mdfor the current maintainer-facing repo and rollout snapshotdocs/manual-merge-gate-checklist.mdfor the maintainer merge checklist used while branch protection is unavailabledocs/consumer-contract.mdfor the downstream consumer template and official sample consumer contractdocs/portfolio-adoption.mdfor the current downstream rollout statedocs/installed-package-coverage.mdfor the installed-package gate coverage ledger and deferred machine-surface boundariesfixtures/presets/v2-sample.jsonfor the checked-in sample preset contract- the sibling
unuOSrepo'sdocs/portfolio/README.mdfor portfolio overview and cross-repo authority - the sibling
unuOSrepo's design foundation contract and common component contract for the future user-facing UI baseline; this repo has no managed product UI adoption requirement today
Design Authority
- First design read:
/Users/yuchen/Code/unu/unuOS/docs/portfolio/design-operating-index.md; it is the only first-read design authority. - Current design status:
pending. - Small UI copy or polish uses the
Lightweight UI Pathin the portfolio Pencil gate. - Historical design specs are planning context only unless the operating index or this repo-local entrypoint explicitly routes to them.
- The legacy positioning spec named above is routed only through
/Users/yuchen/Code/unu/unuOS/docs/portfolio/design-specs-inventory.mdascurrent-routedpositioning and admission guardrail context; it is not active Pencil or current UI authority. - Register a current/draft pair only if this repo adds user-facing UI; no placeholder design-system frame is required for the current automation core.
Release and downstream-consumer routing should stay in the docs above rather than becoming extra top-level README sections.
Workspace Layout
src/unuforge/- CLI, runtime dispatch, host-adapter, and preset logictests/- unit, distribution, and stub-host contract testsfixtures/presets/- sample preset fixtures used by verification commandsscripts/- local distribution build helpersdocs/- release notes and design / implementation history
Human Entrypoints
- source-based local verification:
PYTHONPATH=src python3 -m unittest discover -s tests
- local CLI inspection:
PYTHONPATH=src python3 -m unuforge.cli --help
- local artifact build:
python3 scripts/build_distribution.py --out-dir dist --json
- optional installed-artifact check:
python3 -m pip install dist/unuforge-0.4.0-py3-none-any.whlunuforge --help
- official external install contract:
python3 -m pip install unuforge==0.4.0unuforge --help
- contributors should continue to use source-based execution from the repo checkout
- GitHub Releases remain the tagged source record with built artifacts attached
Machine Entrypoints
- current machine-facing contract example:
PYTHONPATH=src python3 -m unuforge.cli preset inspect --preset fixtures/presets/v2-sample.json --json
- additional machine-entrypoint examples:
PYTHONPATH=src python3 -m unuforge.cli profiles list --preset fixtures/presets/v2-sample.json --jsonPYTHONPATH=src:tests python3 -m unuforge.cli profiles run sample.profile --preset fixtures/presets/v2-sample.json --host-adapter stub_host --dry-run --json -- --flagPYTHONPATH=src:tests python3 -m unuforge.cli actions run promote --preset fixtures/presets/v2-sample.json --host-adapter stub_host --dry-run --json -- --with-web
Verification
Gate level:L2Minimum local verification:PYTHONPATH=src python3 -m unittest discover -s tests
Standard pre-merge verification:PYTHONPATH=src python3 -m unittest discover -s testsPYTHONPATH=src python3 -m unittest tests.test_distribution -vpython3 scripts/build_distribution.py --out-dir dist --jsonPYTHONPATH=src python3 -m unuforge.cli preset inspect --preset fixtures/presets/v2-sample.json --jsonPYTHONPATH=src python3 -m unuforge.cli profiles list --preset fixtures/presets/v2-sample.json --jsonPYTHONPATH=src:tests python3 -m unuforge.cli profiles run sample.profile --preset fixtures/presets/v2-sample.json --host-adapter stub_host --dry-run --json -- --flagPYTHONPATH=src:tests python3 -m unuforge.cli actions run promote --preset fixtures/presets/v2-sample.json --host-adapter stub_host --dry-run --json -- --with-web
Release or heavy verification:python3 scripts/verify_consumer_contracts.py --consumer all- by default this expects sibling checkouts at
../unudispatch,../unuidentity, and../unuvault - if your local layout differs, set
UNUDISPATCH_REPO_ROOTandUNUIDENTITY_REPO_ROOT, andUNUVAULT_REPO_ROOT
The fixture/stub-host adapter used above lives in tests/stub_host.py and
exists only to validate the thin-core dispatch contract locally. The real
downstream contract check is python3 scripts/verify_consumer_contracts.py --consumer all, which exercises the official unudispatch, unuidentity, and
unuvault sample consumers documented in docs/consumer-contract.md.
By default that script expects sibling checkouts at ../unudispatch,
../unuidentity, and ../unuvault. If your local layout differs, set
UNUDISPATCH_REPO_ROOT, UNUIDENTITY_REPO_ROOT, and UNUVAULT_REPO_ROOT
before running it.
GitHub Actions now runs a blocking consumer-contract job that uses the same
consumer contract verification command against checked-out sample consumers.
That job requires a repository secret named CROSS_REPO_READ_TOKEN with
read-only access to unundoTeam/unudispatch, unundoTeam/unuidentity, and
unundoTeam/unuvault.
If the GitHub-hosted runner is unavailable because of account billing or
spending-limit control-plane state, the hosted run is not code-failure
evidence, but it is also not green evidence. The non-payment path is the local
maintainer gate: run current-head test and consumer-contract equivalents
locally, then record the exact status
github-hosted runner unavailable; local maintainer gate used with the local
commands in the maintainer fallback note.
Because this private repo cannot currently enable GitHub required checks on the active plan, merge discipline still depends on the manual maintainer gate documented in docs/release-policy.md. The practical per-PR checklist lives in docs/manual-merge-gate-checklist.md.
Review Model
unuforge follows the portfolio review baseline:
- approved design for behavior, contract, or release-shape changes
- author self-review
- Codex automatic review by default
- passing automation gates before merge
- the
High-Risk PR Reviewworkflow classifies whether a PR touches the repo-local high-risk scope before merge
Agent-led delivery status, review-status reporting, commit closeout, push, and
cleanup defaults follow the portfolio delivery authority in
/Users/yuchen/Code/unu/unuOS/docs/portfolio/agent-delivery-defaults.md.
Manual Merge Gate
unundoTeam/unuforge currently cannot enforce GitHub required checks through
branch protection on its current plan, so main continues to use a manual
merge gate.
Before merge, all of the following must be true:
testhas current-head pass evidence from hosted checks or the local maintainer gateconsumer-contracthas current-head pass evidence from hosted checks or the local maintainer gate- the checks are for the current PR head commit
- the author has completed self-review
- changes touching CLI, preset, host-adapter, distribution, or release shape have an explicit technical review conclusion on the PR
The maintainer should be able to identify the reviewed head commit and
confirm that test and consumer-contract are green or locally passed on
that same commit.
The PR handoff should make three evidence shapes explicit:
- current head commit evidence with
reviewed head commitandchecks verified on that commit - secret-sensitive consumer-contract evidence with
consumer-contract path statusandmaintainer fallback note - a release-sensitive technical review conclusion with
release-sensitive or machine-facing change,downstream contract surface changed or unchanged,evidence used, andwhy merge is still safe
Use the exact PR-template values so the handoff stays machine-readable:
reviewed head commit: current PR head SHA or matching prefix, minimum 7 hexadecimal characterschecks verified on that commit: must explicitly include bothtestandconsumer-contract; hosted checks must be green on that same commit, or the local maintainer gate must have passed on that same commit when the GitHub-hosted runner was unavailableconsumer-contract path status: exactlyran real secret-available path,maintainer-confirmed fallback, orgithub-hosted runner unavailable; local maintainer gate usedmaintainer fallback note:n/afor the real path, or a short maintainer confirmation note when a fallback or local maintainer gate was requiredrelease-sensitive or machine-facing change: exactlyyesorno- if the answer is
no, the remaining technical conclusion fields should all benot applicable - if the answer is
yes, the remaining technical conclusion fields should all explain downstream contract impact, the evidence used, and why merge is still safe
A non-blocking manual-merge-gate-advisory workflow now runs
python3 scripts/check_manual_merge_gate.py --event-json "$GITHUB_EVENT_PATH"
on PR updates to catch stale or incomplete evidence shells early. It does not replace maintainer judgment, and it does not replace live CI review.
The High-Risk PR Review workflow runs
python3 scripts/check_high_risk_pr_review.py on PR updates. It classifies
changes that touch CLI behavior, preset loading, host-adapter dispatch,
distribution behavior, consumer-contract shape, installed-package gate wiring,
or release workflow logic. Record its high-risk review status in the PR
handoff as completed or not_applicable; it does not replace maintainer
judgment or the manual merge gate.
If the real secret-available path did not run, do not treat the change as
equivalent to a normal green maintainer-branch run until a
maintainer-confirmed fallback or
github-hosted runner unavailable; local maintainer gate used status is
recorded with the maintainer note.
Do not merge when any required check is red, missing, stale, or still running.
The only documented no-payment exception is a hosted job that did not start
because the GitHub-hosted runner was unavailable due to billing or
spending-limit control-plane state; that exception still requires local
current-head test and consumer-contract evidence before merge.
Use docs/manual-merge-gate-checklist.md
as the maintainer operating sheet for applying this gate on a live PR.
Human review is optional and is mainly recommended for release flow, preset schema, and host-adapter contract changes.
Cross-Repo Dependencies
- downstream product repos consume
unuforgefor machine-entrypoint execution unuOSowns the shared portfolio automation, verification, and governance contract layer around this thin core- host repositories own execution-specific adapters while
unuforgestays focused on dispatch plumbing
Current Risks / Migration Status
Repo lifecycle:activeContract maturity:automation contract:portfolio-standardverification contract:adopted
- downstream rollout is still uneven across product repos even though
unuforgenow defines the canonical thin-core machine surface - the main risk is allowing
unuforgeto absorb product-specific behavior or governance responsibilities that belong elsewhere - the package install contract is now real, but contributors should still treat source-based execution from the repo checkout as the primary development path
- the next maintenance should strengthen governance mechanics and deeper installed-package surface coverage rather than reopening core distribution capability work
- downstream-upgrade automation and a calendar-based release cadence remain deferred follow-up governance work while the current thin-core release contract stays stable
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unuforge-0.4.0.tar.gz.
File metadata
- Download URL: unuforge-0.4.0.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3404f46345ef4e2b77d4ab831d196605cc6734a9552914977cf6f25a9df47225
|
|
| MD5 |
da595ad1aa0b1d425a992f5383a83003
|
|
| BLAKE2b-256 |
58825fb249aff54f3e6a9baffc88170db31c51a1a9b4a3ef61f3f70235829c9d
|
Provenance
The following attestation bundles were made for unuforge-0.4.0.tar.gz:
Publisher:
release.yml on unundoTeam/unuforge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unuforge-0.4.0.tar.gz -
Subject digest:
3404f46345ef4e2b77d4ab831d196605cc6734a9552914977cf6f25a9df47225 - Sigstore transparency entry: 2136470182
- Sigstore integration time:
-
Permalink:
unundoTeam/unuforge@b41a3ef727c7696bd6340ed06d9bc74b152570b3 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/unundoTeam
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b41a3ef727c7696bd6340ed06d9bc74b152570b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file unuforge-0.4.0-py3-none-any.whl.
File metadata
- Download URL: unuforge-0.4.0-py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c891e4c52173eaa7b0cc1c0ff211dd56e09ffc31b08a17b1ac5ee96bd91cf6a
|
|
| MD5 |
0fba1e79ecc2b90db23e57aad49bf289
|
|
| BLAKE2b-256 |
f993595fb1808ebad5c673e50ade78f15ecc198749b451de051793d70248741f
|
Provenance
The following attestation bundles were made for unuforge-0.4.0-py3-none-any.whl:
Publisher:
release.yml on unundoTeam/unuforge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unuforge-0.4.0-py3-none-any.whl -
Subject digest:
8c891e4c52173eaa7b0cc1c0ff211dd56e09ffc31b08a17b1ac5ee96bd91cf6a - Sigstore transparency entry: 2136470361
- Sigstore integration time:
-
Permalink:
unundoTeam/unuforge@b41a3ef727c7696bd6340ed06d9bc74b152570b3 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/unundoTeam
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b41a3ef727c7696bd6340ed06d9bc74b152570b3 -
Trigger Event:
push
-
Statement type: