Metadata-Version: 2.4
Name: opendox
Version: 0.1.0
Summary: The openDox code leg — the `opendox` package, carved from openxFactory.
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML>=6.0
Provides-Extra: test
Requires-Dist: pytest<9,>=8; extra == "test"
Requires-Dist: opendox[runtime]; extra == "test"
Requires-Dist: opendox[local]; extra == "test"
Requires-Dist: setuptools>=70.1; extra == "test"
Provides-Extra: local
Requires-Dist: opendox[runtime]; extra == "local"
Requires-Dist: pixeltable-pgserver<0.7,>=0.6.0; extra == "local"
Provides-Extra: runtime
Requires-Dist: fastapi>=0.115; extra == "runtime"
Requires-Dist: uvicorn[standard]>=0.30; extra == "runtime"
Requires-Dist: psycopg[binary,pool]>=3.2; extra == "runtime"
Requires-Dist: PyJWT[crypto]>=2.9; extra == "runtime"
Requires-Dist: httpx>=0.27; extra == "runtime"
Dynamic: license-file

# openDox-code

The **code leg** of the `opendox` project: the implementation and its
tests. The requirements it implements live in
[`opensoft/openDox-spec`](https://github.com/opensoft/openDox-spec).

**Clone the assembly root, not this repository.** This leg is mounted as a
submodule at `code/` inside
[`opensoft/openDox`](https://github.com/opensoft/openDox), which
is what pins the commit of this repository that the project currently is:

```sh
git clone --recurse-submodules https://github.com/opensoft/openDox.git
cd openDox
make bootstrap
```

Working here directly is fine — it is an ordinary repository with an ordinary
branch. What advancing this leg does NOT do is advance the project: that is a
commit in the assembly root moving the gitlink, `contracts/code-pin.yaml` and
any workflow `@<sha>` reference together.

Being the code leg confers no authority over the implementation. The split is
navigation; authority travels in grants, and a project that keeps spec and
code in one repository is reviewed identically.

Topic: `xf-project-opendox`.

## Posture

Contributing guidelines and the code of conduct live in the assembly root,
not here: see
[CONTRIBUTING.md](https://github.com/opensoft/openDox/blob/main/CONTRIBUTING.md)
and
[CODE_OF_CONDUCT.md](https://github.com/opensoft/openDox/blob/main/CODE_OF_CONDUCT.md)
in `opensoft/openDox`. Security reports for this repository go through
[SECURITY.md](https://github.com/opensoft/openDox-code/blob/main/SECURITY.md). The `validate` check is a required status check
on `main`, enforced by a repository ruleset — see
[docs/branch-protection.md](https://github.com/opensoft/openDox-code/blob/main/docs/branch-protection.md). It runs the whole
suite, `tests/` and `tests_runtime/`, with the conftest chain in play and a
PostgreSQL service, and it declares no exclusion (plan 034 T036;
`add-neutral-product-standalone-operability` requirement 9). Until then it ran
a narrowed set of suites (RULED Q-L5 (b′), `opensoft/openxFactory#656`,
2026-09-10). That ruling gave the openDox → openXdox dependency as the reason,
but the dependency was inverted at import time first. The live cause of the
narrowing was the carved code's reaches into `ideation_dashboard`,
openxFactory's own package, and plan 034's phase 1 removed them.

## Documentation

The doc index for this repository. Everything under `docs/` is listed here,
and a new document is linked from this table in the same pull request that
adds it — the xFactory family's standing rule, levelled across all six
`openDox`/`openXdox` repositories by the OQ-O scaffold pass
(`opensoft/openxFactory#656`).

| document | what it is |
|---|---|
| [docs/branch-protection.md](https://github.com/opensoft/openDox-code/blob/main/docs/branch-protection.md) | the repository ruleset that makes `validate` a required status check on `main`, its `evaluate` → `active` history, and the one policy difference between the two families |
| [docs/profile-registration-runbook.md](https://github.com/opensoft/openDox-code/blob/main/docs/profile-registration-runbook.md) | the host profile: the one `opendox.domain_profile.register()` call a descendant makes at process start, what openDox reads off it, the default profile openDox's entry points register where no host has (and until when a host's registration still replaces it), how a process that builds nothing refuses, and how RULED ASK-4 Q5's one registration serves both legs' accessors without an import between them |
