r2s 0.2.1__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.
- r2s-0.2.1/CHANGELOG.md +101 -0
- r2s-0.2.1/LICENSE +21 -0
- r2s-0.2.1/MANIFEST.in +6 -0
- r2s-0.2.1/PKG-INFO +117 -0
- r2s-0.2.1/README.md +86 -0
- r2s-0.2.1/SECURITY.md +19 -0
- r2s-0.2.1/pyproject.toml +50 -0
- r2s-0.2.1/schemas/board.schema.json +29 -0
- r2s-0.2.1/schemas/card.schema.json +174 -0
- r2s-0.2.1/schemas/handoff.schema.json +60 -0
- r2s-0.2.1/schemas/outcome.schema.json +82 -0
- r2s-0.2.1/schemas/scoring.schema.json +52 -0
- r2s-0.2.1/setup.cfg +4 -0
- r2s-0.2.1/src/r2s/__init__.py +22 -0
- r2s-0.2.1/src/r2s/cli.py +65 -0
- r2s-0.2.1/src/r2s/errors.py +14 -0
- r2s-0.2.1/src/r2s/handoff.py +58 -0
- r2s-0.2.1/src/r2s/io.py +29 -0
- r2s-0.2.1/src/r2s/paths.py +23 -0
- r2s-0.2.1/src/r2s/rank.py +40 -0
- r2s-0.2.1/src/r2s/schemas/board.schema.json +29 -0
- r2s-0.2.1/src/r2s/schemas/card.schema.json +174 -0
- r2s-0.2.1/src/r2s/schemas/handoff.schema.json +60 -0
- r2s-0.2.1/src/r2s/schemas/outcome.schema.json +82 -0
- r2s-0.2.1/src/r2s/schemas/scoring.schema.json +52 -0
- r2s-0.2.1/src/r2s/score.py +36 -0
- r2s-0.2.1/src/r2s/validate.py +36 -0
- r2s-0.2.1/src/r2s.egg-info/PKG-INFO +117 -0
- r2s-0.2.1/src/r2s.egg-info/SOURCES.txt +32 -0
- r2s-0.2.1/src/r2s.egg-info/dependency_links.txt +1 -0
- r2s-0.2.1/src/r2s.egg-info/entry_points.txt +2 -0
- r2s-0.2.1/src/r2s.egg-info/requires.txt +7 -0
- r2s-0.2.1/src/r2s.egg-info/top_level.txt +1 -0
- r2s-0.2.1/tests/test_runtime.py +154 -0
r2s-0.2.1/CHANGELOG.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to **r2s** are recorded here with **full Git commit SHAs**.
|
|
4
|
+
Verify any entry:
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
git cat-file -t <sha> # expect: commit
|
|
8
|
+
git log -1 --oneline <sha>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Style: [Keep a Changelog](https://keepachangelog.com/).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## [Unreleased]
|
|
16
|
+
|
|
17
|
+
## [0.2.1] — 2026-09-20
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- First production PyPI publish via Trusted Publishing (`v0.2.1` GitHub Release)
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- Package version bump 0.2.0 → 0.2.1 (0.2.0 remains on TestPyPI)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
**Packaging PR #10 merge tip:** `dc824bcee62f6f9ec92ee6755f2ebe4fa8317588`
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- PyPI packaging metadata (0.2.0), Trusted Publishing workflow, packaged schemas for wheel installs
|
|
30
|
+
- `docs/publishing.md` Trusted Publishing checklist
|
|
31
|
+
|
|
32
|
+
**main tip (after identity harden):** `4bdb13527ad0531e86fd86515f606908d267adb8`
|
|
33
|
+
|
|
34
|
+
Public hardening tracked in GitHub Issues (social preview, release tags, etc.).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## [0.2.0] — 2026-09-20 — reference runtime
|
|
39
|
+
|
|
40
|
+
| | SHA |
|
|
41
|
+
|-|-----|
|
|
42
|
+
| Tip (outcome log) | `2133fb986be9c015179f9aedb1203b0f61d13000` |
|
|
43
|
+
| Merge (PR #1) | `8eb906635969c28b5d4fa8893587f4452f63a951` |
|
|
44
|
+
| Runtime feature | `0f60af7911fd361bdc1549f05a63f399d84712eb` |
|
|
45
|
+
| Build-artifact ignore | `72f1fb9875f4586ca0ad3ac4e59a046031d4bd75` |
|
|
46
|
+
| PR | https://github.com/ao3575911/r2s/pull/1 |
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
- Python package `r2s` (`score`, `should_kill`, `rank`, `handoff`, `load_board` / `load_card`)
|
|
50
|
+
- CLI + pytest GitHub Actions workflow
|
|
51
|
+
- Cycle 1 ship outcome (`examples/outcome.runtime.example.json`)
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
- Ignore egg-info build artifacts
|
|
55
|
+
|
|
56
|
+
### Verified object types
|
|
57
|
+
```text
|
|
58
|
+
8eb906635969c28b5d4fa8893587f4452f63a951 merge
|
|
59
|
+
0f60af7911fd361bdc1549f05a63f399d84712eb feat runtime
|
|
60
|
+
72f1fb9875f4586ca0ad3ac4e59a046031d4bd75 chore
|
|
61
|
+
2133fb986be9c015179f9aedb1203b0f61d13000 outcome log
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## [0.1.0] — 2026-09-20 — spec contract
|
|
67
|
+
|
|
68
|
+
| | SHA |
|
|
69
|
+
|-|-----|
|
|
70
|
+
| Initial spec tree | `9ca117eaa83d2abc18d2d233eb12f6ac6ce21af6` |
|
|
71
|
+
| Brand / README / MIT | `a96fd16ff8a461b0fb6d43b5686edfe8a6041613` |
|
|
72
|
+
| Cycle 0 outcome + cycle 1 handoff draft | `8b5e0f65c275645be0fbc699ff22a69e53167711` |
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
- JSON Schemas: card, board, handoff, outcome, scoring
|
|
76
|
+
- `docs/SPEC.md`, examples, MIT license
|
|
77
|
+
- Brand assets + professional README
|
|
78
|
+
- Cycle 0 ship outcome; cycle 1 runtime handoff packet
|
|
79
|
+
|
|
80
|
+
### Verified object types
|
|
81
|
+
```text
|
|
82
|
+
9ca117eaa83d2abc18d2d233eb12f6ac6ce21af6 initial
|
|
83
|
+
a96fd16ff8a461b0fb6d43b5686edfe8a6041613 brand harden
|
|
84
|
+
8b5e0f65c275645be0fbc699ff22a69e53167711 cycle 0 outcome
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Identity
|
|
90
|
+
|
|
91
|
+
| Field | Value |
|
|
92
|
+
|-------|--------|
|
|
93
|
+
| Repository | https://github.com/ao3575911/r2s |
|
|
94
|
+
| Default branch | `main` |
|
|
95
|
+
| Owner | [ao3575911](https://github.com/ao3575911) |
|
|
96
|
+
| License | MIT |
|
|
97
|
+
| Normative contract | `docs/SPEC.md` + `schemas/` |
|
|
98
|
+
| Brand mark | ↻ |
|
|
99
|
+
| Changelog | this file (SHA-verified) |
|
|
100
|
+
| Security | `SECURITY.md` |
|
|
101
|
+
|
r2s-0.2.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Adam O'Connor (ao3575911)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
r2s-0.2.1/MANIFEST.in
ADDED
r2s-0.2.1/PKG-INFO
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: r2s
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Reference runtime for the r2s research-to-ship JSON Schema contract
|
|
5
|
+
Author: ao3575911
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/ao3575911/r2s
|
|
8
|
+
Project-URL: Repository, https://github.com/ao3575911/r2s
|
|
9
|
+
Project-URL: Changelog, https://github.com/ao3575911/r2s/blob/main/CHANGELOG.md
|
|
10
|
+
Project-URL: Issues, https://github.com/ao3575911/r2s/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/ao3575911/r2s/blob/main/docs/SPEC.md
|
|
12
|
+
Keywords: json-schema,research,handoff,ranking,specification
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: jsonschema<5,>=4.22
|
|
25
|
+
Requires-Dist: referencing<1,>=0.35
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest<9,>=8; extra == "dev"
|
|
28
|
+
Requires-Dist: build<2,>=1.2; extra == "dev"
|
|
29
|
+
Requires-Dist: twine<7,>=5; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
<p align="center">
|
|
33
|
+
<img src="docs/brand/icon.png" alt="r2s" width="96" height="96" />
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<h1 align="center">r2s</h1>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
<strong>↻ research → rank → ship</strong><br />
|
|
40
|
+
JSON Schema contract for turning research signals into repo and library work.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<img src="docs/brand/loop.gif" alt="sense → rank → handoff → ship" width="640" />
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<a href="docs/SPEC.md"><img src="https://img.shields.io/badge/spec-v0.1.0-5eead4?style=flat-square" alt="spec v0.1.0" /></a>
|
|
49
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-0f1115?style=flat-square" alt="MIT" /></a>
|
|
50
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-SHA%20verified-5eead4?style=flat-square" alt="changelog" /></a>
|
|
51
|
+
<img src="https://img.shields.io/badge/runtime-Python%203.11%2B-8b949e?style=flat-square" alt="Python runtime" />
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## What this is
|
|
57
|
+
|
|
58
|
+
**r2s** is a small, versioned contract — not an agent and not a framework.
|
|
59
|
+
|
|
60
|
+
You normalize research into **cards**, **rank** them with an explicit score, emit a fixed **handoff** for whoever builds, then record an **outcome** so the next cycle is smarter.
|
|
61
|
+
|
|
62
|
+
**v0.1.0** is the schema contract; **v0.2.0** adds a thin Python reference runtime. Both obey `docs/SPEC.md`. Public history with full commit SHAs: [`CHANGELOG.md`](CHANGELOG.md).
|
|
63
|
+
|
|
64
|
+
## Quick start
|
|
65
|
+
|
|
66
|
+
1. Read the normative rules: [`docs/SPEC.md`](docs/SPEC.md)
|
|
67
|
+
2. Copy [`examples/board.example.json`](examples/board.example.json)
|
|
68
|
+
3. Validate with any JSON Schema Draft 2020-12 validator against [`schemas/`](schemas/)
|
|
69
|
+
|
|
70
|
+
## Loop
|
|
71
|
+
|
|
72
|
+
| Stage | Artifact | Role |
|
|
73
|
+
|-------|----------|------|
|
|
74
|
+
| Sense | `card` | Normalize a research signal |
|
|
75
|
+
| Rank | `board` + scoring rules | Order work; kill weak cards |
|
|
76
|
+
| Handoff | `handoff` | 7-part ship packet for implementers |
|
|
77
|
+
| Ship / learn | `outcome` | Close the loop |
|
|
78
|
+
|
|
79
|
+
**Score**
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
S = (novelty × evidence_strength × usability × dependency_fit)
|
|
83
|
+
/ (hours + compute_cost + blast_radius)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Kill when usability or dependency fit ≈ 0, or `target_repo` is missing at design+.
|
|
87
|
+
|
|
88
|
+
## Layout
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
schemas/ card · board · handoff · outcome · scoring
|
|
92
|
+
docs/SPEC.md normative rules
|
|
93
|
+
docs/brand/ icon · social · README loop GIF
|
|
94
|
+
examples/ worked board + handoff (this repo as the sample)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Brand
|
|
98
|
+
|
|
99
|
+
| | |
|
|
100
|
+
|-|-|
|
|
101
|
+
| Mark | stacked cards → chevron (cyan on charcoal) |
|
|
102
|
+
| Emoji | ↻ |
|
|
103
|
+
| Accent | `#5eead4` on `#0f1115` |
|
|
104
|
+
|
|
105
|
+
## Security
|
|
106
|
+
|
|
107
|
+
Card fields are **untrusted data**. Validators must not execute claim or evidence strings. This repo holds no credentials and no network clients.
|
|
108
|
+
|
|
109
|
+
## Changelog & identity
|
|
110
|
+
|
|
111
|
+
Ship history is **SHA-verified** in [`CHANGELOG.md`](CHANGELOG.md). Security posture: [`SECURITY.md`](SECURITY.md).
|
|
112
|
+
|
|
113
|
+
Current `main` tip at publish of this note is recorded in the changelog Unreleased/latest section after each merge.
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
[MIT](LICENSE)
|
r2s-0.2.1/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/brand/icon.png" alt="r2s" width="96" height="96" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">r2s</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>↻ research → rank → ship</strong><br />
|
|
9
|
+
JSON Schema contract for turning research signals into repo and library work.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img src="docs/brand/loop.gif" alt="sense → rank → handoff → ship" width="640" />
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="docs/SPEC.md"><img src="https://img.shields.io/badge/spec-v0.1.0-5eead4?style=flat-square" alt="spec v0.1.0" /></a>
|
|
18
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-0f1115?style=flat-square" alt="MIT" /></a>
|
|
19
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-SHA%20verified-5eead4?style=flat-square" alt="changelog" /></a>
|
|
20
|
+
<img src="https://img.shields.io/badge/runtime-Python%203.11%2B-8b949e?style=flat-square" alt="Python runtime" />
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## What this is
|
|
26
|
+
|
|
27
|
+
**r2s** is a small, versioned contract — not an agent and not a framework.
|
|
28
|
+
|
|
29
|
+
You normalize research into **cards**, **rank** them with an explicit score, emit a fixed **handoff** for whoever builds, then record an **outcome** so the next cycle is smarter.
|
|
30
|
+
|
|
31
|
+
**v0.1.0** is the schema contract; **v0.2.0** adds a thin Python reference runtime. Both obey `docs/SPEC.md`. Public history with full commit SHAs: [`CHANGELOG.md`](CHANGELOG.md).
|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
1. Read the normative rules: [`docs/SPEC.md`](docs/SPEC.md)
|
|
36
|
+
2. Copy [`examples/board.example.json`](examples/board.example.json)
|
|
37
|
+
3. Validate with any JSON Schema Draft 2020-12 validator against [`schemas/`](schemas/)
|
|
38
|
+
|
|
39
|
+
## Loop
|
|
40
|
+
|
|
41
|
+
| Stage | Artifact | Role |
|
|
42
|
+
|-------|----------|------|
|
|
43
|
+
| Sense | `card` | Normalize a research signal |
|
|
44
|
+
| Rank | `board` + scoring rules | Order work; kill weak cards |
|
|
45
|
+
| Handoff | `handoff` | 7-part ship packet for implementers |
|
|
46
|
+
| Ship / learn | `outcome` | Close the loop |
|
|
47
|
+
|
|
48
|
+
**Score**
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
S = (novelty × evidence_strength × usability × dependency_fit)
|
|
52
|
+
/ (hours + compute_cost + blast_radius)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Kill when usability or dependency fit ≈ 0, or `target_repo` is missing at design+.
|
|
56
|
+
|
|
57
|
+
## Layout
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
schemas/ card · board · handoff · outcome · scoring
|
|
61
|
+
docs/SPEC.md normative rules
|
|
62
|
+
docs/brand/ icon · social · README loop GIF
|
|
63
|
+
examples/ worked board + handoff (this repo as the sample)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Brand
|
|
67
|
+
|
|
68
|
+
| | |
|
|
69
|
+
|-|-|
|
|
70
|
+
| Mark | stacked cards → chevron (cyan on charcoal) |
|
|
71
|
+
| Emoji | ↻ |
|
|
72
|
+
| Accent | `#5eead4` on `#0f1115` |
|
|
73
|
+
|
|
74
|
+
## Security
|
|
75
|
+
|
|
76
|
+
Card fields are **untrusted data**. Validators must not execute claim or evidence strings. This repo holds no credentials and no network clients.
|
|
77
|
+
|
|
78
|
+
## Changelog & identity
|
|
79
|
+
|
|
80
|
+
Ship history is **SHA-verified** in [`CHANGELOG.md`](CHANGELOG.md). Security posture: [`SECURITY.md`](SECURITY.md).
|
|
81
|
+
|
|
82
|
+
Current `main` tip at publish of this note is recorded in the changelog Unreleased/latest section after each merge.
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
[MIT](LICENSE)
|
r2s-0.2.1/SECURITY.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
## Trust model
|
|
4
|
+
|
|
5
|
+
Card fields (claim, evidence refs, notes) are **untrusted data**. Validators and the reference runtime must not execute or fetch them.
|
|
6
|
+
|
|
7
|
+
## Reporting
|
|
8
|
+
|
|
9
|
+
Open a private security advisory on this GitHub repository, or contact the owner via GitHub.
|
|
10
|
+
|
|
11
|
+
## Supply chain
|
|
12
|
+
|
|
13
|
+
- Pin runtime dependencies in `pyproject.toml`
|
|
14
|
+
- Prefer Dependabot security updates once enabled (see open issues)
|
|
15
|
+
- Secret scanning and push protection are enabled on the repo
|
|
16
|
+
|
|
17
|
+
## Verified commits
|
|
18
|
+
|
|
19
|
+
Public ship points are listed with full SHAs in [`CHANGELOG.md`](CHANGELOG.md). Confirm with `git cat-file -t <sha>`.
|
r2s-0.2.1/pyproject.toml
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "r2s"
|
|
7
|
+
version = "0.2.1"
|
|
8
|
+
description = "Reference runtime for the r2s research-to-ship JSON Schema contract"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "ao3575911" }]
|
|
13
|
+
keywords = ["json-schema", "research", "handoff", "ranking", "specification"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.11",
|
|
19
|
+
"Programming Language :: Python :: 3.12",
|
|
20
|
+
"Programming Language :: Python :: 3.13",
|
|
21
|
+
"Topic :: Software Development :: Libraries",
|
|
22
|
+
"Typing :: Typed",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"jsonschema>=4.22,<5",
|
|
26
|
+
"referencing>=0.35,<1",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[project.optional-dependencies]
|
|
30
|
+
dev = ["pytest>=8,<9", "build>=1.2,<2", "twine>=5,<7"]
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://github.com/ao3575911/r2s"
|
|
34
|
+
Repository = "https://github.com/ao3575911/r2s"
|
|
35
|
+
Changelog = "https://github.com/ao3575911/r2s/blob/main/CHANGELOG.md"
|
|
36
|
+
Issues = "https://github.com/ao3575911/r2s/issues"
|
|
37
|
+
Documentation = "https://github.com/ao3575911/r2s/blob/main/docs/SPEC.md"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
r2s = "r2s.cli:main"
|
|
41
|
+
|
|
42
|
+
[tool.setuptools.packages.find]
|
|
43
|
+
where = ["src"]
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.package-data]
|
|
46
|
+
r2s = ["schemas/*.schema.json"]
|
|
47
|
+
|
|
48
|
+
[tool.pytest.ini_options]
|
|
49
|
+
testpaths = ["tests"]
|
|
50
|
+
pythonpath = ["src"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ao3575911.github.io/r2s/schemas/board.schema.json",
|
|
4
|
+
"title": "R2S Board",
|
|
5
|
+
"description": "Hypothesis board: a set of cards plus ranking policy.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"version",
|
|
10
|
+
"cards"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"version": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"const": "0.1.0"
|
|
16
|
+
},
|
|
17
|
+
"max_active_builds": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"minimum": 1,
|
|
20
|
+
"default": 2
|
|
21
|
+
},
|
|
22
|
+
"cards": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"$ref": "card.schema.json"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ao3575911.github.io/r2s/schemas/card.schema.json",
|
|
4
|
+
"title": "R2S Card",
|
|
5
|
+
"description": "Normalized research signal for the research-to-ship loop.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"id",
|
|
10
|
+
"claim",
|
|
11
|
+
"evidence",
|
|
12
|
+
"novelty",
|
|
13
|
+
"evidence_strength",
|
|
14
|
+
"usability",
|
|
15
|
+
"dependency_fit",
|
|
16
|
+
"hours",
|
|
17
|
+
"compute_cost",
|
|
18
|
+
"blast_radius",
|
|
19
|
+
"status"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"id": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1,
|
|
25
|
+
"description": "Stable card id (slug)."
|
|
26
|
+
},
|
|
27
|
+
"claim": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"minLength": 1,
|
|
30
|
+
"description": "One sentence the eventual code must make true."
|
|
31
|
+
},
|
|
32
|
+
"evidence": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"minItems": 0,
|
|
35
|
+
"items": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": [
|
|
39
|
+
"kind",
|
|
40
|
+
"ref"
|
|
41
|
+
],
|
|
42
|
+
"properties": {
|
|
43
|
+
"kind": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": [
|
|
46
|
+
"paper",
|
|
47
|
+
"repo",
|
|
48
|
+
"doc",
|
|
49
|
+
"spike",
|
|
50
|
+
"outcome",
|
|
51
|
+
"other"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"ref": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"minLength": 1
|
|
57
|
+
},
|
|
58
|
+
"note": {
|
|
59
|
+
"type": "string"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"earn_path": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"properties": {
|
|
68
|
+
"who_pays": {
|
|
69
|
+
"type": "string"
|
|
70
|
+
},
|
|
71
|
+
"wedge": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"cheapest_test": {
|
|
75
|
+
"type": "string"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"target_repo": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"pattern": "^[^/\\s]+/[^/\\s]+$",
|
|
82
|
+
"description": "owner/name when status is design or later."
|
|
83
|
+
},
|
|
84
|
+
"novelty": {
|
|
85
|
+
"type": "number",
|
|
86
|
+
"minimum": 0,
|
|
87
|
+
"maximum": 1
|
|
88
|
+
},
|
|
89
|
+
"evidence_strength": {
|
|
90
|
+
"type": "number",
|
|
91
|
+
"minimum": 0,
|
|
92
|
+
"maximum": 1
|
|
93
|
+
},
|
|
94
|
+
"usability": {
|
|
95
|
+
"type": "number",
|
|
96
|
+
"minimum": 0,
|
|
97
|
+
"maximum": 1
|
|
98
|
+
},
|
|
99
|
+
"dependency_fit": {
|
|
100
|
+
"type": "number",
|
|
101
|
+
"minimum": 0,
|
|
102
|
+
"maximum": 1
|
|
103
|
+
},
|
|
104
|
+
"hours": {
|
|
105
|
+
"type": "number",
|
|
106
|
+
"exclusiveMinimum": 0
|
|
107
|
+
},
|
|
108
|
+
"compute_cost": {
|
|
109
|
+
"type": "number",
|
|
110
|
+
"minimum": 0
|
|
111
|
+
},
|
|
112
|
+
"blast_radius": {
|
|
113
|
+
"type": "number",
|
|
114
|
+
"minimum": 0
|
|
115
|
+
},
|
|
116
|
+
"status": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"enum": [
|
|
119
|
+
"sense",
|
|
120
|
+
"design",
|
|
121
|
+
"build",
|
|
122
|
+
"ship",
|
|
123
|
+
"learn",
|
|
124
|
+
"killed"
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"kill_reason": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
},
|
|
130
|
+
"notes": {
|
|
131
|
+
"type": "string"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"allOf": [
|
|
135
|
+
{
|
|
136
|
+
"if": {
|
|
137
|
+
"properties": {
|
|
138
|
+
"status": {
|
|
139
|
+
"enum": [
|
|
140
|
+
"design",
|
|
141
|
+
"build",
|
|
142
|
+
"ship"
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"required": [
|
|
147
|
+
"status"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"then": {
|
|
151
|
+
"required": [
|
|
152
|
+
"target_repo"
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"if": {
|
|
158
|
+
"properties": {
|
|
159
|
+
"status": {
|
|
160
|
+
"const": "killed"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"required": [
|
|
164
|
+
"status"
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
"then": {
|
|
168
|
+
"required": [
|
|
169
|
+
"kill_reason"
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ao3575911.github.io/r2s/schemas/handoff.schema.json",
|
|
4
|
+
"title": "R2S Handoff Packet",
|
|
5
|
+
"description": "Fixed 7-part ship handoff for Builder (or any implementer).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"repo",
|
|
10
|
+
"claim",
|
|
11
|
+
"api_sketch",
|
|
12
|
+
"non_goals",
|
|
13
|
+
"acceptance",
|
|
14
|
+
"security_notes",
|
|
15
|
+
"first_pr_scope"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"card_id": {
|
|
19
|
+
"type": "string"
|
|
20
|
+
},
|
|
21
|
+
"repo": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[^/\\s]+/[^/\\s]+$"
|
|
24
|
+
},
|
|
25
|
+
"claim": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"minLength": 1
|
|
28
|
+
},
|
|
29
|
+
"api_sketch": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"minLength": 1,
|
|
32
|
+
"description": "Public surface the outside world sees (for a spec repo: schemas and docs paths)."
|
|
33
|
+
},
|
|
34
|
+
"non_goals": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"minItems": 1
|
|
40
|
+
},
|
|
41
|
+
"acceptance": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
},
|
|
46
|
+
"minItems": 1
|
|
47
|
+
},
|
|
48
|
+
"security_notes": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"minItems": 1
|
|
54
|
+
},
|
|
55
|
+
"first_pr_scope": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|