arbiter-engine 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. arbiter_engine-0.1.0/.gitattributes +30 -0
  2. arbiter_engine-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +80 -0
  3. arbiter_engine-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +57 -0
  4. arbiter_engine-0.1.0/.gitignore +32 -0
  5. arbiter_engine-0.1.0/AI_ATTRIBUTION.md +55 -0
  6. arbiter_engine-0.1.0/AUTHORS.md +22 -0
  7. arbiter_engine-0.1.0/CITATION.cff +21 -0
  8. arbiter_engine-0.1.0/CODE_OF_CONDUCT.md +12 -0
  9. arbiter_engine-0.1.0/CONTRIBUTING.md +58 -0
  10. arbiter_engine-0.1.0/LICENSE +202 -0
  11. arbiter_engine-0.1.0/NOTICE +18 -0
  12. arbiter_engine-0.1.0/PKG-INFO +278 -0
  13. arbiter_engine-0.1.0/PRIVACY.md +59 -0
  14. arbiter_engine-0.1.0/README.md +246 -0
  15. arbiter_engine-0.1.0/ROADMAP.md +34 -0
  16. arbiter_engine-0.1.0/SECURITY.md +58 -0
  17. arbiter_engine-0.1.0/SUPPORT.md +38 -0
  18. arbiter_engine-0.1.0/TRADEMARK.md +47 -0
  19. arbiter_engine-0.1.0/arbiter_engine/__init__.py +31 -0
  20. arbiter_engine-0.1.0/arbiter_engine/api.py +473 -0
  21. arbiter_engine-0.1.0/arbiter_engine/axiom_thresholds.py +118 -0
  22. arbiter_engine-0.1.0/arbiter_engine/envelope.py +270 -0
  23. arbiter_engine-0.1.0/arbiter_engine/examples/water_tank.yaml +112 -0
  24. arbiter_engine-0.1.0/arbiter_engine/fire_frequency.py +252 -0
  25. arbiter_engine-0.1.0/arbiter_engine/history/__init__.py +12 -0
  26. arbiter_engine-0.1.0/arbiter_engine/history/observation.py +596 -0
  27. arbiter_engine-0.1.0/arbiter_engine/history/observation_production.py +335 -0
  28. arbiter_engine-0.1.0/arbiter_engine/history/observation_source_wiring.py +120 -0
  29. arbiter_engine-0.1.0/arbiter_engine/history/readiness.py +288 -0
  30. arbiter_engine-0.1.0/arbiter_engine/interfaces.py +1353 -0
  31. arbiter_engine-0.1.0/arbiter_engine/mcp/__init__.py +1 -0
  32. arbiter_engine-0.1.0/arbiter_engine/mcp/server.py +221 -0
  33. arbiter_engine-0.1.0/arbiter_engine/ontology/__init__.py +18 -0
  34. arbiter_engine-0.1.0/arbiter_engine/ontology/axiom_verdicts_production.py +332 -0
  35. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/__init__.py +26 -0
  36. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/boundedness.py +340 -0
  37. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/connectivity.py +396 -0
  38. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/conservation.py +266 -0
  39. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/consistency.py +422 -0
  40. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/extensions.py +106 -0
  41. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/homeostasis.py +783 -0
  42. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/monotonicity.py +444 -0
  43. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/responsiveness.py +752 -0
  44. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/roles.py +207 -0
  45. arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/stability.py +327 -0
  46. arbiter_engine-0.1.0/arbiter_engine/ontology/domain_loader.py +485 -0
  47. arbiter_engine-0.1.0/arbiter_engine/ontology/loader.py +802 -0
  48. arbiter_engine-0.1.0/arbiter_engine/ontology/reasoner.py +1069 -0
  49. arbiter_engine-0.1.0/arbiter_engine/propagation/__init__.py +1 -0
  50. arbiter_engine-0.1.0/arbiter_engine/propagation/impact_estimator.py +305 -0
  51. arbiter_engine-0.1.0/arbiter_engine/propagation/lp_confidence.py +123 -0
  52. arbiter_engine-0.1.0/arbiter_engine/propagation/mcts_root_cause.py +266 -0
  53. arbiter_engine-0.1.0/arbiter_engine/propagation/root_cause.py +559 -0
  54. arbiter_engine-0.1.0/arbiter_engine/propagation/weight_learner.py +216 -0
  55. arbiter_engine-0.1.0/arbiter_engine/rca/__init__.py +4 -0
  56. arbiter_engine-0.1.0/arbiter_engine/rca/greedy_set_cover.py +291 -0
  57. arbiter_engine-0.1.0/arbiter_engine/residual/__init__.py +1 -0
  58. arbiter_engine-0.1.0/arbiter_engine/residual/predict_vs_mirror.py +542 -0
  59. arbiter_engine-0.1.0/arbiter_engine/temporal/__init__.py +1 -0
  60. arbiter_engine-0.1.0/arbiter_engine/temporal/temporal_edge.py +584 -0
  61. arbiter_engine-0.1.0/arbiter_engine/temporal/trend_projection.py +430 -0
  62. arbiter_engine-0.1.0/arbiter_engine/twin/__init__.py +23 -0
  63. arbiter_engine-0.1.0/arbiter_engine/twin/action_clears_problem.py +217 -0
  64. arbiter_engine-0.1.0/arbiter_engine/twin/builder.py +479 -0
  65. arbiter_engine-0.1.0/arbiter_engine/twin/gap.py +132 -0
  66. arbiter_engine-0.1.0/arbiter_engine/twin/hypothesis_generator.py +530 -0
  67. arbiter_engine-0.1.0/arbiter_engine/twin/hypothesis_production.py +236 -0
  68. arbiter_engine-0.1.0/arbiter_engine/twin/kernel_pipeline_executor.py +571 -0
  69. arbiter_engine-0.1.0/arbiter_engine/twin/monte_carlo_predictor.py +1001 -0
  70. arbiter_engine-0.1.0/arbiter_engine/twin/optimization_production.py +233 -0
  71. arbiter_engine-0.1.0/arbiter_engine/twin/pipeline_production.py +176 -0
  72. arbiter_engine-0.1.0/arbiter_engine/twin/topology.py +450 -0
  73. arbiter_engine-0.1.0/arbiter_engine/twin/topology_optimizer.py +412 -0
  74. arbiter_engine-0.1.0/arbiter_engine/twin/traverser.py +1260 -0
  75. arbiter_engine-0.1.0/arbiter_engine/twin/traverser_production.py +283 -0
  76. arbiter_engine-0.1.0/arbiter_engine/types.py +427 -0
  77. arbiter_engine-0.1.0/evidence/alpha1_evidence_pack.md +194 -0
  78. arbiter_engine-0.1.0/evidence/customer_deployment_runbook.md +464 -0
  79. arbiter_engine-0.1.0/evidence/extended_fault_scenarios.md +149 -0
  80. arbiter_engine-0.1.0/evidence/l5_surprise_synthesis.md +234 -0
  81. arbiter_engine-0.1.0/evidence/observability_handoff_guide.md +99 -0
  82. arbiter_engine-0.1.0/evidence/tech_brief.md +149 -0
  83. arbiter_engine-0.1.0/evidence/use-case-catalogue.md +472 -0
  84. arbiter_engine-0.1.0/examples/water_tank.yaml +112 -0
  85. arbiter_engine-0.1.0/pyproject.toml +40 -0
@@ -0,0 +1,30 @@
1
+ # Line endings: normalize to LF in the repository, checkout per platform
2
+ *text=auto eol=lf
3
+
4
+ # Documentation and configuration files (explicit text)
5
+ *.md text
6
+ *.txt text
7
+ *.rst text
8
+ *.yaml text
9
+ *.yml text
10
+ *.json text
11
+ *.cff text
12
+ *.toml text
13
+
14
+ # Binary file safety
15
+ *.png binary
16
+ *.jpg binary
17
+ *.jpeg binary
18
+ *.gif binary
19
+ *.svg text
20
+ *.pdf binary
21
+ *.zip binary
22
+ *.tar.gz binary
23
+ *.ico binary
24
+
25
+ # Language hints for GitHub Linguist
26
+ *.md linguist-documentation
27
+ LICENSE linguist-documentation
28
+ NOTICE.md linguist-documentation
29
+ AUTHORS.md linguist-documentation
30
+ TRADEMARK.md linguist-documentation
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: Bug report
3
+ about: The engine reported something you believe is wrong
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Before you write it up: read the declines
10
+
11
+ `check()` returns four legs, and the answer is in `not_checked` more often than
12
+ in `findings`. An axiom that declined did not fail — it reports a
13
+ machine-readable reason for why it could not run, and that reason is usually the
14
+ whole story.
15
+
16
+ Two that account for most surprises:
17
+
18
+ - **`not_applicable`** — some axioms decide whether they apply by reading the
19
+ indicator's name. `CONSISTENCY` wants `count`, `percent`/`pct` or `ratio` in
20
+ it; `RESPONSIVENESS` wants `response` or `latency`. This is a known rough
21
+ edge, not a rule you were supposed to infer.
22
+ - **`insufficient_samples`** — the floor is per-axiom, and the decline states
23
+ both the count it had and the count it needed.
24
+
25
+ If the decline explains it, you may not have a bug. Please open the issue
26
+ anyway if the *reason* was unclear — a decline nobody can act on is a defect in
27
+ its own right.
28
+
29
+ ## What happened
30
+
31
+ <!-- One sentence. -->
32
+
33
+ ## What you expected
34
+
35
+ <!-- Including which axiom you expected to fire, or to stay quiet. -->
36
+
37
+ ## The model
38
+
39
+ <!-- The smallest domain YAML that shows it. Trim to the one entity type and
40
+ the one indicator if you can. -->
41
+
42
+ ```yaml
43
+
44
+ ```
45
+
46
+ ## How the session was fed
47
+
48
+ <!-- Threshold axioms read the entity's `properties`; the temporal axioms read
49
+ observation history. Feeding only one is the commonest cause of a check
50
+ that reports nothing while a value is plainly out of range — so please
51
+ show both. -->
52
+
53
+ ```python
54
+
55
+ ```
56
+
57
+ ## The envelope
58
+
59
+ <!-- ALL FOUR LEGS of check(). `not_checked` especially, verbatim. -->
60
+
61
+ ```json
62
+
63
+ ```
64
+
65
+ ## Environment
66
+
67
+ - `arbiter-engine` version or commit:
68
+ - Python version:
69
+ - OS:
70
+ - Optional extras installed (`scipy`, `rdflib`, `mcp`): <!-- these change which
71
+ modules import, so a difference here can change what you see -->
72
+
73
+ ## Anything else
74
+
75
+ <!-- When it started, a workaround you found, a related issue. -->
76
+
77
+ ---
78
+
79
+ **Security vulnerabilities do not belong here.** Use the private channel in
80
+ [SECURITY.md](../../SECURITY.md).
@@ -0,0 +1,57 @@
1
+ ## What this changes
2
+
3
+ <!-- Pull requests are not being merged yet: the public API is pre-1.0 and still
4
+ moving, so a patch against it may not survive the month. See CONTRIBUTING.md.
5
+ This form is here because a pull request that arrives anyway should carry
6
+ what a reviewer would otherwise have to ask for, and it will be read.
7
+
8
+ One paragraph below: what the reader gets that they did not have. -->
9
+
10
+ ## Why
11
+
12
+ <!-- The defect, the gap, or the case that motivated it. If it fixes an issue,
13
+ link it: Closes #N. -->
14
+
15
+ ## Kind of change
16
+
17
+ - [ ] Bug fix
18
+ - [ ] New capability
19
+ - [ ] Documentation
20
+ - [ ] Breaking change to a supported name
21
+ - [ ] Other
22
+
23
+ ## Evidence
24
+
25
+ <!-- How do you know it works? Prefer output over description. -->
26
+
27
+ - [ ] A test that **fails without this change**. If the test passes both before
28
+ and after, it is not evidence yet — the quickest proof is to revert the
29
+ change and watch it go red.
30
+ - [ ] For a checker change: the envelope before and after, including
31
+ `not_checked`. A finding that appears is only half the claim; the declines
32
+ it stopped or started producing are the other half.
33
+ - [ ] For anything touching the eleven supported names or `arbiter_engine.api`:
34
+ said so explicitly below.
35
+
36
+ ```
37
+
38
+ ```
39
+
40
+ ## Supported surface
41
+
42
+ <!-- Eleven names are a contract; everything deeper is importable and
43
+ unpromised. Which did you touch? -->
44
+
45
+ - [ ] Supported surface unchanged
46
+ - [ ] Supported surface changed — described above, and why it could not be done
47
+ behind it
48
+
49
+ ## Checklist
50
+
51
+ - [ ] Read [CONTRIBUTING.md](CONTRIBUTING.md)
52
+ - [ ] Agree to the [Code of Conduct](CODE_OF_CONDUCT.md)
53
+ - [ ] Licensed under Apache-2.0, per [LICENSE](LICENSE)
54
+ - [ ] If AI-assisted: reviewed the generated content and accept it as my own
55
+ contribution, per [AI_ATTRIBUTION.md](AI_ATTRIBUTION.md)
56
+
57
+ ## Anything reviewers should know
@@ -0,0 +1,32 @@
1
+ # Python build + cache artefacts.
2
+ #
3
+ # `__pycache__` is the load-bearing line: the build compiles the tree to prove
4
+ # it imports standalone, and compiled bytecode embeds the absolute path of the
5
+ # source it was compiled from. The build sweeps it and the staging copy filters
6
+ # it, so this is the third net rather than the only one -- but it is the one
7
+ # that decides what `git add -A` does in a release target.
8
+ __pycache__/
9
+ *.py[cod]
10
+ *.so
11
+
12
+ # Packaging
13
+ build/
14
+ dist/
15
+ *.egg-info/
16
+ .eggs/
17
+
18
+ # Environments
19
+ .venv/
20
+ venv/
21
+
22
+ # Test + type-checker caches
23
+ .pytest_cache/
24
+ .mypy_cache/
25
+ .ruff_cache/
26
+ .coverage
27
+ htmlcov/
28
+
29
+ # Editors
30
+ *.swp
31
+ *.swo
32
+ .DS_Store
@@ -0,0 +1,55 @@
1
+ # AI Attribution
2
+
3
+ Arbiter Project ("Arbiter") is developed using a workflow that combines human authorship with AI assistance. This file documents that workflow transparently, names the AI tools involved, and describes how the human-versus-AI contribution boundary is handled.
4
+
5
+ This file is a disclosure mechanism, not a legal instrument. License terms are in [LICENSE](LICENSE); the attribution notice the licence requires is in [NOTICE](NOTICE); name-use policy is in [TRADEMARK.md](TRADEMARK.md); security reporting is in [SECURITY.md](SECURITY.md).
6
+
7
+ ## Tools used
8
+
9
+ Arbiter's development uses the following AI tools alongside conventional editing, version control, and review:
10
+
11
+ - **Claude Code** (CLI agent published by Anthropic) — primary AI development assistant. Used for code generation, refactoring, documentation drafting, test scaffolding, and architectural discussion.
12
+ - **Anthropic Claude** large language models (currently the Opus family) — the underlying model that powers Claude Code.
13
+
14
+ The project does not use other code-generation AI tools (e.g., GitHub Copilot, Cursor, etc.) at the time of writing. If that changes, this file will be updated.
15
+
16
+ AI tools are licensed by the human author at the consumer / individual subscription tier.
17
+
18
+ ## Workflow division
19
+
20
+ The author treats the following contribution categories as distinct:
21
+
22
+ - **Human-authored** — design decisions, architectural choices, strategic decomposition, problem framing, the decision records those produce, methodology codified from review, narrative framing, and review of all generated output. The human author retains direct authorship of these surfaces.
23
+ - **AI-assisted** — code and documentation where the human directs the AI tool with concrete instructions, then reviews, modifies, and integrates the output. The substantive selection, arrangement, and editorial control rest with the human; the AI tool generates candidate text/code that the human accepts, rejects, or modifies.
24
+ - **AI-generated boilerplate** — purely mechanical scaffolding (e.g., test boilerplate, repetitive type stubs, format conversions) produced by AI on direct request without significant creative selection. This category is minimized in practice; most output is reviewed-and-modified before commit.
25
+
26
+ Reviewers and downstream users should assume that any source file or documentation in this repository may contain AI-assisted content unless otherwise noted. The human author has reviewed and accepted all committed content.
27
+
28
+ ## Commit-level transparency
29
+
30
+ Commits that include AI-assisted content carry a `Co-Authored-By:` trailer that names the specific model used — at the time of writing, `Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>`. **The named model changes as the tooling does, and the version in any given commit's trailer is the one that produced it**; this line records the form, not a constant. It previously quoted a superseded model version as though it were the current one, which is the failure mode a disclosure file can least afford. This trailer is a transparency marker — it documents AI involvement in the commit's authorship process. It does not assert that the AI is a legally recognized co-author; under current US copyright doctrine (US Copyright Office guidance, 2023), AI tools are not eligible for copyright authorship.
31
+
32
+ The presence of the trailer is informational. Its absence on older commits does not imply they were free of AI assistance — the trailer was adopted partway through the project's history and has been applied consistently going forward.
33
+
34
+ ## Legal posture
35
+
36
+ The legal treatment of AI-assisted and AI-generated content is unsettled in most jurisdictions. The project's working posture is:
37
+
38
+ - **Copyright (human-contributed portions)**: the human author claims copyright in design choices, selection, arrangement, prompts, review/editorial control, and integration work. These contributions are licensed under the [Apache License 2.0](LICENSE) granted by the human author.
39
+ - **Copyright (AI-generated portions)**: under current US Copyright Office guidance, content produced solely by AI without sufficient human authorship may not be eligible for copyright protection. The project does not assert copyright over such portions, nor does it deny that the Apache 2.0 grant applies to them. Downstream users may treat the entire repository as Apache-2.0-licensed for practical purposes; readers concerned about the legal status of specific portions are encouraged to seek their own counsel.
40
+ - **Training-data inheritance**: large language models are trained on broad code and documentation corpora, including open-source-licensed material. The project's AI tool vendor (Anthropic) provides assurances regarding output rights; the project relies on those assurances. Downstream legal developments (e.g., pending or future rulings on AI training-data licensing) may affect this posture. The project will update this file if material changes warrant it.
41
+
42
+ This file is not legal advice. Users with substantive copyright, licensing, or compliance concerns should consult qualified counsel.
43
+
44
+ ## What this means for reusers and contributors
45
+
46
+ - **Reusers**: treat the repository as Apache-2.0-licensed for practical use, integration, and redistribution per [LICENSE](LICENSE). If you are deploying Arbiter in a context with strict provenance requirements (regulated industries, contractual provenance audits, etc.), incorporate this disclosure into your audit trail.
47
+ - **Contributors**: if you submit a pull request, you are representing that any AI-assisted portion of your contribution complies with your AI tool vendor's terms and that you have the right to license your contribution under the project's Apache License 2.0. The project does not require disclosure of AI assistance in contributions, but welcomes it where the contributor wishes to document the workflow.
48
+
49
+ ## Updates
50
+
51
+ This file is updated when the project's AI-tool usage materially changes — new tools adopted, vendor terms change, legal landscape shifts, or workflow division evolves. Minor model version bumps (e.g., Opus 4.6 → 4.7) do not require an update unless the vendor's terms change.
52
+
53
+ ## License of this file
54
+
55
+ This AI_ATTRIBUTION file is part of the Arbiter Project documentation and is covered by the project's [Apache License 2.0](LICENSE). See also [TRADEMARK.md](TRADEMARK.md) for Arbiter Project name-use policy.
@@ -0,0 +1,22 @@
1
+ # Authors
2
+
3
+ ## Primary author
4
+
5
+ **James Sheen** — primary author, designer, and current maintainer of the Arbiter Project.
6
+
7
+ - GitHub: [@james-sheen](https://github.com/james-sheen)
8
+ - Contact: see [SECURITY.md](SECURITY.md) for security disclosures; general project inquiries via the GitHub repository's issue tracker.
9
+
10
+ The primary author retains copyright in design decisions, architectural choices, strategic decomposition, problem framing, decision documents, codified methodology, partner-materials narrative, and review of all committed content. See [LICENSE](LICENSE) for the Apache 2.0 grant covering project code and documentation, and [AI_ATTRIBUTION.md](AI_ATTRIBUTION.md) for the workflow division between human-authored and AI-assisted content.
11
+
12
+ ## Contributors
13
+
14
+ Additional contributors will be acknowledged here and in commit history as they join. The Arbiter Project welcomes contributions per [CONTRIBUTING.md](CONTRIBUTING.md); contributor names are added to commit metadata and acknowledged in release notes where applicable.
15
+
16
+ ## Updates
17
+
18
+ This file is updated when significant author or contributor changes occur. Routine commits do not require updates.
19
+
20
+ ## License of this file
21
+
22
+ This AUTHORS file is part of the Arbiter Project documentation and is covered by the project's [Apache License 2.0](LICENSE). See also [TRADEMARK.md](TRADEMARK.md) for Arbiter Project name-use policy.
@@ -0,0 +1,21 @@
1
+ cff-version: 1.2.0
2
+ message: "If you reference Arbiter in academic work, please cite as follows."
3
+ title: "Arbiter: a detection engine that reports what it did not check"
4
+ abstract: "A domain-agnostic detection engine. Invariants are declared per indicator in a YAML domain model rather than in code, and evaluated by eight axiom checkers covering bounds, stability, baseline recovery, direction, conservation, topology, agreement and deadlines. Every pass returns findings alongside the evaluations that declined to run, each carrying a machine-readable reason, together with a count of evaluations attempted. A clean result is therefore distinguishable from one where nothing was testable, which is the property the engine exists to provide. Released under Apache 2.0."
5
+ type: software
6
+ authors:
7
+ - family-names: "Sheen"
8
+ given-names: "James"
9
+ alias: "james-sheen"
10
+ - name: "Arbiter Project"
11
+ license: Apache-2.0
12
+ version: "0.1.0"
13
+ date-released: "2026-08-12"
14
+ repository-code: "https://github.com/james-sheen/arbiter"
15
+ url: "https://github.com/james-sheen/arbiter"
16
+ keywords:
17
+ - anomaly-detection
18
+ - invariants
19
+ - ontology
20
+ - digital-twin
21
+ - observability
@@ -0,0 +1,12 @@
1
+ # Code of Conduct
2
+
3
+ Arbiter follows the [Contributor Covenant Code of Conduct v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
4
+
5
+ All participants in Arbiter's issue tracker, discussions, and any community forum are expected to abide by these standards. Violations may be reported to the maintainers via the private channel described in [SECURITY.md](SECURITY.md) (GitHub Private Vulnerability Reporting routes confidentially to maintainers and is the appropriate intake for conduct reports as well as security disclosures).
6
+
7
+ ## Summary
8
+
9
+ - Be kind. Assume good faith.
10
+ - Critique ideas, not people.
11
+ - Adversarial-finding reports describe bypass behavior; they do not describe testers as adversaries.
12
+ - Harassment, abuse, and deliberate dissemination of harmful content are out of scope.
@@ -0,0 +1,58 @@
1
+ # Contributing
2
+
3
+ The most useful thing you can send is a case where the engine reported a clean
4
+ pass over something it did not actually evaluate. That is the failure the whole
5
+ design exists to prevent, and it is the bug report this project wants most.
6
+
7
+ ## What is open right now
8
+
9
+ **Issues: open.** Bug reports, adversarial findings, and questions about
10
+ modelling a domain are all welcome. The bug form asks for the things that
11
+ actually reproduce a defect here — the smallest domain model that shows it, how
12
+ the session was fed, and all four legs of the envelope.
13
+
14
+ **Pull requests: not being merged yet.** The public API surface is pre-1.0 and
15
+ still moving, and a patch merged against a surface that changes next month
16
+ helps nobody. This is a decision about timing rather than about the value of
17
+ outside work, and it is recorded the same way in `ROADMAP.md`.
18
+
19
+ A pull request template ships anyway, and that is deliberate: if you open one
20
+ regardless, the form collects what a reviewer would otherwise have to ask for,
21
+ and it will be read even while the merge queue is closed. An issue describing
22
+ the change is the faster route to a decision.
23
+
24
+ ## Reporting well
25
+
26
+ A decline you cannot act on is a defect in the thing this project claims to be
27
+ good at. If `not_checked` gave you a reason and you could not work out what to
28
+ do about it, that is worth an issue on its own — the reason is supposed to be
29
+ actionable, and if it is not then the vocabulary or the documentation is wrong.
30
+
31
+ Two reasons account for most surprises. `insufficient_samples` reports both the
32
+ count it had and the count it needed. `not_applicable` means a checker decided
33
+ the axiom does not apply at all, and some of them decide that by reading the
34
+ indicator's name — a rough edge rather than a rule you should have to infer.
35
+
36
+ ## Sign-off
37
+
38
+ Contributions are accepted under the Developer Certificate of Origin. There is
39
+ no CLA and no copyright assignment. Sign your commits:
40
+
41
+ ```bash
42
+ git commit -s
43
+ ```
44
+
45
+ That adds a `Signed-off-by` line asserting you have the right to submit the work
46
+ under this project's licence. Everything here is Apache 2.0.
47
+
48
+ ## AI-assisted contributions
49
+
50
+ They are welcome and much of this repository was written that way; see
51
+ `AI_ATTRIBUTION.md`. The requirement is the same as for anything else: you have
52
+ read it, you understand it, and you are prepared to stand behind it. Generated
53
+ code you have not reviewed is not a contribution, it is a request that someone
54
+ else review it for you.
55
+
56
+ ## Conduct
57
+
58
+ See `CODE_OF_CONDUCT.md`.
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
@@ -0,0 +1,18 @@
1
+ Arbiter
2
+ Copyright 2023-2026 Arbiter Project
3
+
4
+ This product includes software developed as part of the Arbiter Project.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
7
+ this file except in compliance with the License. You may obtain a copy of the
8
+ License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software distributed
13
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14
+ CONDITIONS OF ANY KIND, either express or implied.
15
+
16
+ "Arbiter" is a project name, not a licence grant. Apache License Section 6
17
+ withholds any trademark grant; TRADEMARK.md, alongside this file, states what
18
+ use of the name IS permitted.