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.
- arbiter_engine-0.1.0/.gitattributes +30 -0
- arbiter_engine-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +80 -0
- arbiter_engine-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +57 -0
- arbiter_engine-0.1.0/.gitignore +32 -0
- arbiter_engine-0.1.0/AI_ATTRIBUTION.md +55 -0
- arbiter_engine-0.1.0/AUTHORS.md +22 -0
- arbiter_engine-0.1.0/CITATION.cff +21 -0
- arbiter_engine-0.1.0/CODE_OF_CONDUCT.md +12 -0
- arbiter_engine-0.1.0/CONTRIBUTING.md +58 -0
- arbiter_engine-0.1.0/LICENSE +202 -0
- arbiter_engine-0.1.0/NOTICE +18 -0
- arbiter_engine-0.1.0/PKG-INFO +278 -0
- arbiter_engine-0.1.0/PRIVACY.md +59 -0
- arbiter_engine-0.1.0/README.md +246 -0
- arbiter_engine-0.1.0/ROADMAP.md +34 -0
- arbiter_engine-0.1.0/SECURITY.md +58 -0
- arbiter_engine-0.1.0/SUPPORT.md +38 -0
- arbiter_engine-0.1.0/TRADEMARK.md +47 -0
- arbiter_engine-0.1.0/arbiter_engine/__init__.py +31 -0
- arbiter_engine-0.1.0/arbiter_engine/api.py +473 -0
- arbiter_engine-0.1.0/arbiter_engine/axiom_thresholds.py +118 -0
- arbiter_engine-0.1.0/arbiter_engine/envelope.py +270 -0
- arbiter_engine-0.1.0/arbiter_engine/examples/water_tank.yaml +112 -0
- arbiter_engine-0.1.0/arbiter_engine/fire_frequency.py +252 -0
- arbiter_engine-0.1.0/arbiter_engine/history/__init__.py +12 -0
- arbiter_engine-0.1.0/arbiter_engine/history/observation.py +596 -0
- arbiter_engine-0.1.0/arbiter_engine/history/observation_production.py +335 -0
- arbiter_engine-0.1.0/arbiter_engine/history/observation_source_wiring.py +120 -0
- arbiter_engine-0.1.0/arbiter_engine/history/readiness.py +288 -0
- arbiter_engine-0.1.0/arbiter_engine/interfaces.py +1353 -0
- arbiter_engine-0.1.0/arbiter_engine/mcp/__init__.py +1 -0
- arbiter_engine-0.1.0/arbiter_engine/mcp/server.py +221 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/__init__.py +18 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axiom_verdicts_production.py +332 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/__init__.py +26 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/boundedness.py +340 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/connectivity.py +396 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/conservation.py +266 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/consistency.py +422 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/extensions.py +106 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/homeostasis.py +783 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/monotonicity.py +444 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/responsiveness.py +752 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/roles.py +207 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/axioms/stability.py +327 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/domain_loader.py +485 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/loader.py +802 -0
- arbiter_engine-0.1.0/arbiter_engine/ontology/reasoner.py +1069 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/__init__.py +1 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/impact_estimator.py +305 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/lp_confidence.py +123 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/mcts_root_cause.py +266 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/root_cause.py +559 -0
- arbiter_engine-0.1.0/arbiter_engine/propagation/weight_learner.py +216 -0
- arbiter_engine-0.1.0/arbiter_engine/rca/__init__.py +4 -0
- arbiter_engine-0.1.0/arbiter_engine/rca/greedy_set_cover.py +291 -0
- arbiter_engine-0.1.0/arbiter_engine/residual/__init__.py +1 -0
- arbiter_engine-0.1.0/arbiter_engine/residual/predict_vs_mirror.py +542 -0
- arbiter_engine-0.1.0/arbiter_engine/temporal/__init__.py +1 -0
- arbiter_engine-0.1.0/arbiter_engine/temporal/temporal_edge.py +584 -0
- arbiter_engine-0.1.0/arbiter_engine/temporal/trend_projection.py +430 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/__init__.py +23 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/action_clears_problem.py +217 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/builder.py +479 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/gap.py +132 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/hypothesis_generator.py +530 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/hypothesis_production.py +236 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/kernel_pipeline_executor.py +571 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/monte_carlo_predictor.py +1001 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/optimization_production.py +233 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/pipeline_production.py +176 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/topology.py +450 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/topology_optimizer.py +412 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/traverser.py +1260 -0
- arbiter_engine-0.1.0/arbiter_engine/twin/traverser_production.py +283 -0
- arbiter_engine-0.1.0/arbiter_engine/types.py +427 -0
- arbiter_engine-0.1.0/evidence/alpha1_evidence_pack.md +194 -0
- arbiter_engine-0.1.0/evidence/customer_deployment_runbook.md +464 -0
- arbiter_engine-0.1.0/evidence/extended_fault_scenarios.md +149 -0
- arbiter_engine-0.1.0/evidence/l5_surprise_synthesis.md +234 -0
- arbiter_engine-0.1.0/evidence/observability_handoff_guide.md +99 -0
- arbiter_engine-0.1.0/evidence/tech_brief.md +149 -0
- arbiter_engine-0.1.0/evidence/use-case-catalogue.md +472 -0
- arbiter_engine-0.1.0/examples/water_tank.yaml +112 -0
- 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.
|