outcomebound 1.6.0__py3-none-any.whl

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 (195) hide show
  1. _outcomebound_launch.py +75 -0
  2. outcomebound-1.6.0.dist-info/METADATA +235 -0
  3. outcomebound-1.6.0.dist-info/RECORD +195 -0
  4. outcomebound-1.6.0.dist-info/WHEEL +4 -0
  5. outcomebound-1.6.0.dist-info/entry_points.txt +2 -0
  6. outcomebound-1.6.0.dist-info/licenses/LICENSE +210 -0
  7. outcomebound-1.6.0.dist-info/licenses/NOTICE +2 -0
  8. outcomebound_tools/__init__.py +0 -0
  9. outcomebound_tools/__main__.py +98 -0
  10. outcomebound_tools/_home/LICENSE +210 -0
  11. outcomebound_tools/_home/NOTICE +2 -0
  12. outcomebound_tools/_home/OutcomeBound.md +134 -0
  13. outcomebound_tools/_home/VERSION +1 -0
  14. outcomebound_tools/_home/adapters/harnesses.json +477 -0
  15. outcomebound_tools/_home/adapters/surfaces.json +141 -0
  16. outcomebound_tools/_home/fragments/setup/client.md +13 -0
  17. outcomebound_tools/_home/fragments/setup/commands.md +37 -0
  18. outcomebound_tools/_home/fragments/setup/explore.md +13 -0
  19. outcomebound_tools/_home/fragments/setup/research.md +29 -0
  20. outcomebound_tools/_home/fragments/setup/solo.md +21 -0
  21. outcomebound_tools/_home/fragments/setup/team.md +20 -0
  22. outcomebound_tools/_home/fragments/setup/tickets.md +44 -0
  23. outcomebound_tools/_home/fragments/setup/workspace.md +77 -0
  24. outcomebound_tools/_home/fragments/stack/ci-release.md +29 -0
  25. outcomebound_tools/_home/fragments/stack/db-migrations.md +28 -0
  26. outcomebound_tools/_home/fragments/stack/deploy.md +13 -0
  27. outcomebound_tools/_home/fragments/stack/multi-agent.md +30 -0
  28. outcomebound_tools/_home/fragments/stack/node-typescript.md +22 -0
  29. outcomebound_tools/_home/fragments/stack/python.md +25 -0
  30. outcomebound_tools/_home/fragments/stack/runtime.md +13 -0
  31. outcomebound_tools/_home/schemas/decision-briefs.schema.json +187 -0
  32. outcomebound_tools/_home/schemas/discovery.schema.json +406 -0
  33. outcomebound_tools/_home/schemas/explorable-source.schema.json +39 -0
  34. outcomebound_tools/_home/schemas/harness-table.schema.json +490 -0
  35. outcomebound_tools/_home/schemas/instruction-audit-report.schema.json +246 -0
  36. outcomebound_tools/_home/schemas/retired-terms.schema.json +61 -0
  37. outcomebound_tools/_home/schemas/review-report.schema.json +52 -0
  38. outcomebound_tools/_home/schemas/scaffold-manifest.schema.json +161 -0
  39. outcomebound_tools/_home/schemas/scaffold-report.schema.json +80 -0
  40. outcomebound_tools/_home/schemas/sources-manifest.schema.json +50 -0
  41. outcomebound_tools/_home/schemas/sources-report.schema.json +40 -0
  42. outcomebound_tools/_home/schemas/ticket-store.schema.json +83 -0
  43. outcomebound_tools/_home/schemas/tickets-report.schema.json +226 -0
  44. outcomebound_tools/_home/schemas/validation-plan.schema.json +118 -0
  45. outcomebound_tools/_home/scripts/new-spec.sh +97 -0
  46. outcomebound_tools/_home/skills/adopt-outcomebound/SKILL.md +173 -0
  47. outcomebound_tools/_home/skills/decision-brief/SKILL.md +134 -0
  48. outcomebound_tools/_home/skills/diagnose/SKILL.md +52 -0
  49. outcomebound_tools/_home/skills/explain-spec/SKILL.md +50 -0
  50. outcomebound_tools/_home/skills/explorable/SKILL.md +135 -0
  51. outcomebound_tools/_home/skills/explorable/references/runtime.md +257 -0
  52. outcomebound_tools/_home/skills/gather-requirements/SKILL.md +89 -0
  53. outcomebound_tools/_home/skills/gather-requirements/references/source-kinds.md +48 -0
  54. outcomebound_tools/_home/skills/hand-off-tickets/SKILL.md +135 -0
  55. outcomebound_tools/_home/skills/land-change/SKILL.md +102 -0
  56. outcomebound_tools/_home/skills/review-findings/SKILL.md +74 -0
  57. outcomebound_tools/_home/skills/run-acceptance/SKILL.md +103 -0
  58. outcomebound_tools/_home/skills/slice-tickets/SKILL.md +211 -0
  59. outcomebound_tools/_home/skills/slice-tickets/references/github.md +86 -0
  60. outcomebound_tools/_home/skills/sync-tracker/SKILL.md +81 -0
  61. outcomebound_tools/_home/skills/tests-worth-keeping/SKILL.md +54 -0
  62. outcomebound_tools/_home/skills/using-outcomebound/SKILL.md +68 -0
  63. outcomebound_tools/_home/skills/using-outcomebound/references/lifecycle.md +158 -0
  64. outcomebound_tools/_home/skills/using-outcomebound/references/new-project.md +143 -0
  65. outcomebound_tools/_home/templates/ci/Makefile.snippet +26 -0
  66. outcomebound_tools/_home/templates/ci/README.md +64 -0
  67. outcomebound_tools/_home/templates/ci/generic.sh +38 -0
  68. outcomebound_tools/_home/templates/ci/github-actions.yml +54 -0
  69. outcomebound_tools/_home/templates/ci/gitlab-ci.yml +31 -0
  70. outcomebound_tools/_home/templates/explorable/explorable.css +471 -0
  71. outcomebound_tools/_home/templates/explorable/explorable.js +1426 -0
  72. outcomebound_tools/_home/templates/explorable/libraries.json +15 -0
  73. outcomebound_tools/_home/templates/explorable/shell.html +24 -0
  74. outcomebound_tools/_home/templates/explorable/starters/decision.briefs.json +25 -0
  75. outcomebound_tools/_home/templates/explorable/starters/decision.source.html +200 -0
  76. outcomebound_tools/_home/templates/explorable/starters/interview.source.html +27 -0
  77. outcomebound_tools/_home/templates/explorable/starters/learning.source.html +87 -0
  78. outcomebound_tools/_home/templates/fragment-local.md +28 -0
  79. outcomebound_tools/_home/templates/goal/goal.md +25 -0
  80. outcomebound_tools/_home/templates/harness/README.md +45 -0
  81. outcomebound_tools/_home/templates/harness/claude-code.settings.json +12 -0
  82. outcomebound_tools/_home/templates/harness/codex.rules +43 -0
  83. outcomebound_tools/_home/templates/lifecycle/organization.md +52 -0
  84. outcomebound_tools/_home/templates/lifecycle/overlay-ai-product.md +28 -0
  85. outcomebound_tools/_home/templates/lifecycle/overlay-audit.md +33 -0
  86. outcomebound_tools/_home/templates/lifecycle/overlay-client.md +97 -0
  87. outcomebound_tools/_home/templates/lifecycle/overlay-eu-market.md +37 -0
  88. outcomebound_tools/_home/templates/lifecycle/overlay-safety-critical.md +29 -0
  89. outcomebound_tools/_home/templates/lifecycle/overlay-unattended-agents.md +28 -0
  90. outcomebound_tools/_home/templates/lifecycle/prototype.md +44 -0
  91. outcomebound_tools/_home/templates/lifecycle/solo.md +55 -0
  92. outcomebound_tools/_home/templates/lifecycle/team.md +60 -0
  93. outcomebound_tools/_home/templates/managed-block.agents.md.tmpl +34 -0
  94. outcomebound_tools/_home/templates/outcomebound.mk +21 -0
  95. outcomebound_tools/_home/templates/scaffold/ai-product/design.md +2 -0
  96. outcomebound_tools/_home/templates/scaffold/ai-product/local.md +4 -0
  97. outcomebound_tools/_home/templates/scaffold/audit/local.md +4 -0
  98. outcomebound_tools/_home/templates/scaffold/client/contributing.md +15 -0
  99. outcomebound_tools/_home/templates/scaffold/client/local.md +5 -0
  100. outcomebound_tools/_home/templates/scaffold/common/changelog.md +5 -0
  101. outcomebound_tools/_home/templates/scaffold/common/ci.yml +27 -0
  102. outcomebound_tools/_home/templates/scaffold/common/contributing.md +3 -0
  103. outcomebound_tools/_home/templates/scaffold/common/dependabot.yml +8 -0
  104. outcomebound_tools/_home/templates/scaffold/common/deploy-gate.md +2 -0
  105. outcomebound_tools/_home/templates/scaffold/common/deploy-route.md +5 -0
  106. outcomebound_tools/_home/templates/scaffold/common/deploy.md +2 -0
  107. outcomebound_tools/_home/templates/scaffold/common/local.md +13 -0
  108. outcomebound_tools/_home/templates/scaffold/common/offer-ci.txt +1 -0
  109. outcomebound_tools/_home/templates/scaffold/common/offer-design.txt +1 -0
  110. outcomebound_tools/_home/templates/scaffold/common/offer-floor.txt +1 -0
  111. outcomebound_tools/_home/templates/scaffold/common/offer-tickets.txt +1 -0
  112. outcomebound_tools/_home/templates/scaffold/common/offer-update-bot.txt +1 -0
  113. outcomebound_tools/_home/templates/scaffold/common/release.md +2 -0
  114. outcomebound_tools/_home/templates/scaffold/common/security-head.md +1 -0
  115. outcomebound_tools/_home/templates/scaffold/common/security.md +5 -0
  116. outcomebound_tools/_home/templates/scaffold/eu-market/design.md +3 -0
  117. outcomebound_tools/_home/templates/scaffold/eu-market/local.md +7 -0
  118. outcomebound_tools/_home/templates/scaffold/eu-market/security.md +6 -0
  119. outcomebound_tools/_home/templates/scaffold/organization/CODEOWNERS +3 -0
  120. outcomebound_tools/_home/templates/scaffold/organization/contributing-codeowners.md +3 -0
  121. outcomebound_tools/_home/templates/scaffold/organization/contributing.md +3 -0
  122. outcomebound_tools/_home/templates/scaffold/organization/local-codeowners.md +2 -0
  123. outcomebound_tools/_home/templates/scaffold/organization/local.md +4 -0
  124. outcomebound_tools/_home/templates/scaffold/organization/pull_request_template.md +9 -0
  125. outcomebound_tools/_home/templates/scaffold/organization/security.md +3 -0
  126. outcomebound_tools/_home/templates/scaffold/prototype/local.md +9 -0
  127. outcomebound_tools/_home/templates/scaffold/safety-critical/local.md +4 -0
  128. outcomebound_tools/_home/templates/scaffold/scaffold.json +855 -0
  129. outcomebound_tools/_home/templates/scaffold/solo/local.md +8 -0
  130. outcomebound_tools/_home/templates/scaffold/team/contributing.md +8 -0
  131. outcomebound_tools/_home/templates/scaffold/team/leave.md +3 -0
  132. outcomebound_tools/_home/templates/scaffold/team/local.md +7 -0
  133. outcomebound_tools/_home/templates/scaffold/unattended-agents/local.md +2 -0
  134. outcomebound_tools/_home/templates/spec/design.md +52 -0
  135. outcomebound_tools/_home/templates/spec/plan.md +15 -0
  136. outcomebound_tools/_home/templates/tickets/github-export.graphql +16 -0
  137. outcomebound_tools/_home/templates/tickets/issue-template.md +33 -0
  138. outcomebound_tools/_home/templates/validation/plan.example.json +23 -0
  139. outcomebound_tools/_home/templates/workspace.gitignore +6 -0
  140. outcomebound_tools/adapters.py +164 -0
  141. outcomebound_tools/adopt.py +3303 -0
  142. outcomebound_tools/artifactcheck.py +160 -0
  143. outcomebound_tools/decision_brief.py +901 -0
  144. outcomebound_tools/decision_brief_html.py +232 -0
  145. outcomebound_tools/declared_tests.py +217 -0
  146. outcomebound_tools/discovery.py +1019 -0
  147. outcomebound_tools/drift.py +408 -0
  148. outcomebound_tools/explorable.py +359 -0
  149. outcomebound_tools/explorable_browser.py +246 -0
  150. outcomebound_tools/explorable_check.py +188 -0
  151. outcomebound_tools/explorable_shell.py +315 -0
  152. outcomebound_tools/explorable_source.py +474 -0
  153. outcomebound_tools/facts.py +1084 -0
  154. outcomebound_tools/fileplan.py +216 -0
  155. outcomebound_tools/finish_check.py +3951 -0
  156. outcomebound_tools/floor.py +2408 -0
  157. outcomebound_tools/fragments.py +583 -0
  158. outcomebound_tools/gitenv.py +73 -0
  159. outcomebound_tools/harness_roots.py +79 -0
  160. outcomebound_tools/hashing.py +13 -0
  161. outcomebound_tools/home.py +20 -0
  162. outcomebound_tools/identity.py +319 -0
  163. outcomebound_tools/instruction_audit.py +3017 -0
  164. outcomebound_tools/mechanisms.py +44 -0
  165. outcomebound_tools/paths.py +207 -0
  166. outcomebound_tools/programs.py +868 -0
  167. outcomebound_tools/research.py +803 -0
  168. outcomebound_tools/review_check.py +467 -0
  169. outcomebound_tools/scaffold.py +1294 -0
  170. outcomebound_tools/schemacheck.py +149 -0
  171. outcomebound_tools/sources.py +287 -0
  172. outcomebound_tools/sources_check.py +635 -0
  173. outcomebound_tools/sources_image.py +221 -0
  174. outcomebound_tools/sources_ledger.py +192 -0
  175. outcomebound_tools/sources_manifest.py +399 -0
  176. outcomebound_tools/surfaces.py +109 -0
  177. outcomebound_tools/textio.py +135 -0
  178. outcomebound_tools/tickets.py +361 -0
  179. outcomebound_tools/tickets_bounds.py +118 -0
  180. outcomebound_tools/tickets_brief.py +638 -0
  181. outcomebound_tools/tickets_check.py +608 -0
  182. outcomebound_tools/tickets_claims.py +352 -0
  183. outcomebound_tools/tickets_declaration.py +175 -0
  184. outcomebound_tools/tickets_draft.py +373 -0
  185. outcomebound_tools/tickets_git.py +106 -0
  186. outcomebound_tools/tickets_github.py +781 -0
  187. outcomebound_tools/tickets_graph.py +154 -0
  188. outcomebound_tools/tickets_links.py +232 -0
  189. outcomebound_tools/tickets_model.py +826 -0
  190. outcomebound_tools/tickets_publish.py +326 -0
  191. outcomebound_tools/tickets_report.py +537 -0
  192. outcomebound_tools/tickets_requirements.py +149 -0
  193. outcomebound_tools/tickets_store.py +75 -0
  194. outcomebound_tools/validation.py +703 -0
  195. outcomebound_tools/walk.py +61 -0
@@ -0,0 +1,75 @@
1
+ """The `outcomebound` command of an installed package: its console entry point.
2
+
3
+ pip and uv make `[console_scripts] outcomebound = _outcomebound_launch:main` a program that runs
4
+ the Python of the environment that holds the engine: a script in `bin/` on POSIX, an `.exe` in
5
+ `Scripts\\` on Windows. So the command finds its engine without a link or a neighbour to follow,
6
+ and it is the one `outcomebound` in that folder. `main` runs that Python again, isolated, as
7
+ `python -I -X utf8 -m outcomebound_tools <arguments>`: `-I` leaves the caller's folder and
8
+ PYTHONPATH off the engine's path, and `-X utf8` makes the engine's text UTF-8 whatever the console's
9
+ code page is. Nothing is exported, so a command the engine runs gets the caller's environment
10
+ unchanged.
11
+
12
+ The engine runs as a child process on every platform, and this process returns its exit code.
13
+ Windows has no call that replaces a process, and a harness that waits for a hook would see the
14
+ hook end at once if the parent did. POSIX could replace the process (`os.execv`), but the
15
+ quality floor's S606 rule flags that call and a change to the floor is a maintainer's act, so one
16
+ path serves both. While the child runs, Ctrl-C is left to the child, which the console sends it
17
+ as well, and SIGTERM is passed on to it; a child that a signal ended gives 128 plus the signal
18
+ number, as a shell reports it.
19
+
20
+ The wheel ships this file as the top-level module `_outcomebound_launch`, not inside
21
+ `outcomebound_tools`: a folder on PYTHONPATH that holds an `outcomebound_tools` of its own then
22
+ cannot take the first hop. What remains is a module of that exact name on PYTHONPATH, which only
23
+ the caller's own environment can place. The entry point's own folder is first on `sys.path`, not
24
+ the caller's.
25
+
26
+ Standard library only, and no OutcomeBound import: it runs before the engine's path is set.
27
+ An engine that cannot start exits 127, never 2, which a harness's stop hook reads as holding the
28
+ turn.
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import signal
34
+ import subprocess
35
+ import sys
36
+ from collections.abc import Sequence
37
+
38
+ NOT_STARTED = 127 # the exit code of a shell that finds no command to run
39
+ SIGNALLED = 128 # a shell's exit code for a child that a signal ended, plus the signal number
40
+
41
+
42
+ def command(arguments: Sequence[str]) -> list[str]:
43
+ """The engine's command line: this environment's Python, isolated, UTF-8."""
44
+
45
+ return [sys.executable, "-I", "-X", "utf8", "-m", "outcomebound_tools", *arguments]
46
+
47
+
48
+ def _run(argv: list[str]) -> int:
49
+ """Run `argv` to its end and return its exit code."""
50
+
51
+ process = subprocess.Popen(argv)
52
+ handled = (signal.SIGINT, signal.SIGTERM)
53
+ before = [
54
+ signal.signal(signal.SIGINT, signal.SIG_IGN),
55
+ signal.signal(signal.SIGTERM, lambda number, frame: process.send_signal(number)),
56
+ ]
57
+ try:
58
+ code = process.wait()
59
+ finally:
60
+ for number, handler in zip(handled, before, strict=True):
61
+ signal.signal(number, handler)
62
+ return SIGNALLED - code if code < 0 else code
63
+
64
+
65
+ def main(arguments: Sequence[str] | None = None) -> int:
66
+ given = sys.argv[1:] if arguments is None else arguments
67
+ if not sys.executable:
68
+ print("outcomebound: this Python does not name its own file", file=sys.stderr)
69
+ return NOT_STARTED
70
+ argv = command(given)
71
+ try:
72
+ return _run(argv)
73
+ except OSError as error:
74
+ print(f"outcomebound: cannot start the engine with {argv[0]}: {error}", file=sys.stderr)
75
+ return NOT_STARTED
@@ -0,0 +1,235 @@
1
+ Metadata-Version: 2.4
2
+ Name: outcomebound
3
+ Version: 1.6.0
4
+ Summary: An operating contract for coding agents, and the engine that installs it into a repository.
5
+ Keywords: coding agents, AGENTS.md, operating contract, skills, Claude Code, Codex
6
+ Author: Rajas Abhyankar
7
+ License-Expression: Apache-2.0
8
+ License-File: LICENSE
9
+ License-File: NOTICE
10
+ Project-URL: Homepage, https://github.com/rajasdevel/outcomebound
11
+ Project-URL: Source, https://github.com/rajasdevel/outcomebound
12
+ Project-URL: Issues, https://github.com/rajasdevel/outcomebound/issues
13
+ Project-URL: Changelog, https://github.com/rajasdevel/outcomebound/blob/main/CHANGELOG.md
14
+ Project-URL: Security, https://github.com/rajasdevel/outcomebound/blob/main/SECURITY.md
15
+ Requires-Python: >=3.10
16
+ Classifier: Environment :: Console
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: 3.14
26
+ Classifier: Topic :: Software Development
27
+ Classifier: Topic :: Software Development :: Quality Assurance
28
+ Description-Content-Type: text/markdown
29
+
30
+ # OutcomeBound
31
+
32
+ [![CI](https://github.com/rajasdevel/outcomebound/actions/workflows/ci.yml/badge.svg)](https://github.com/rajasdevel/outcomebound/actions/workflows/ci.yml)
33
+
34
+ **Work sized to the outcome. Evidence for each step.**
35
+
36
+ OutcomeBound gives your coding agent a 300-word contract, thirteen skills it reads when a task
37
+ needs them, and engine checks that run your project's own commands. The agent does the engineering
38
+ that the outcome needs: no less, and no more. It holds only the decisions that are yours, and it
39
+ reports what is true, what is not done, and which check shows it.
40
+
41
+ It works through the harness you already use (Claude Code, Codex, Cursor, Gemini CLI, Amp). The
42
+ engine is Python standard library only, and it never runs your agent.
43
+
44
+ [Quick start](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/README.md#quick-start) · [What you get](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/README.md#what-you-get) · [How it works](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/README.md#how-it-works) ·
45
+ [Evidence and limits](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/README.md#evidence-and-limits) · [Harness support](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/references/portability.md)
46
+
47
+ ## What you get
48
+
49
+ | Feature | What it does |
50
+ | --- | --- |
51
+ | **The contract** | A short block in `AGENTS.md`: frame each task by outcome, context, bounds and completion bar; size the plan to the risk; report against the ask. |
52
+ | **Skills on demand** | Requirements, decision briefs, tests, diagnosis, review, specs, tickets, hand-offs, landing, acceptance and more. Each loads only when its trigger matches. |
53
+ | **Finish check** | A turn-end hook runs your Done commands. A failure that the turn caused goes back to the agent with the output; an old failure goes to you. |
54
+ | **Lifecycle scaffold** | `outcomebound scaffold` writes the files a prototype, solo, team or organization project needs, and lists each value still to fill. |
55
+ | **Decision briefs** | An act outside the agent's authority comes back as options, a recommendation, evidence and an undo line. Other work continues. |
56
+ | **Quality floor** | Keep old lint and type debt visible, reject new findings, and make each loosening a recorded decision. |
57
+ | **Ticket hand-off** | Slice work into outcomes you accept, then hand each one to an implementer with the detail its tier needs. |
58
+ | **Instruction check** | Read agent instructions for hidden characters, override phrases and risky settings. |
59
+
60
+ ## From idea to delivery
61
+
62
+ ![Outcome, context, bounds and completion bar carry through requirements, design and accepted work, build and validation, release and delivery, operation and maintenance, and retirement. Start at the current state and use only the stages the outcome needs.](https://raw.githubusercontent.com/rajasdevel/outcomebound/v1.6.0/docs/assets/outcomebound-lifecycle.svg)
63
+
64
+ A local bug fix goes straight to its regression check. An export feature keeps its format and
65
+ privacy constraints with the accepted work, lands through your route, and checks the delivery.
66
+ The [lifecycle reference](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/skills/using-outcomebound/references/lifecycle.md) gives the evidence
67
+ and hand-offs for each stage. Your project records its own lifecycle in a few lines.
68
+
69
+ ## Quick start
70
+
71
+ You need Python 3.10 or later, Git 2.52.0 or later, and a Git work tree.
72
+
73
+ ```sh
74
+ uv tool install git+https://github.com/rajasdevel/outcomebound@v1.6.0
75
+ cd your-repo
76
+ outcomebound adopt . --detect # writes nothing; prints the install command for your files
77
+ ```
78
+
79
+ For a Python project with a `make test` target and both harnesses' folders, it prints:
80
+
81
+ ```sh
82
+ outcomebound adopt . --harness claude-code,codex --fragments python,commands --done 'make test'
83
+ ```
84
+
85
+ Run that command, read the diff, and commit the files. Add `--finish-check` to install the turn-end
86
+ hook; the install then runs your Done commands once and records any failure that is already there:
87
+
88
+ ```text
89
+ PASS finish-check: `make test` in 1 s
90
+ measured finish-check: Done ran once in 1 s; the hook gives it 570 s of its 600 s timeout
91
+ ```
92
+
93
+ Start a new agent session. Claude Code asks you to trust the workspace; Codex asks you to trust the
94
+ hook in `/hooks`. Add `outcomebound adopt . --check` to CI to catch stale or edited managed files.
95
+
96
+ You can also give the whole onboarding to your agent: ask it to follow the guide that `--detect`
97
+ names. It proposes only the project facts an agent would otherwise get wrong, each with the file
98
+ that shows it, and asks you once for what the repository cannot show.
99
+
100
+ ### Start a new project
101
+
102
+ ```sh
103
+ mkdir my-app && cd my-app && git init
104
+ outcomebound scaffold . --lifecycle solo --visibility private # the plan; writes nothing
105
+ outcomebound scaffold . --lifecycle solo --visibility private --accept
106
+ outcomebound scaffold . --lifecycle solo --visibility private --check # the values left to fill
107
+ ```
108
+
109
+ The plan names each file, each platform act and who does it (a branch rule, a secret scan), and
110
+ the `adopt` command for the lifecycle. The scaffold writes only absent files, never edits a present
111
+ one, and installs nothing. Then ask your agent to start the project: the
112
+ [new-project reference](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/skills/using-outcomebound/references/new-project.md) sizes the idea, tests
113
+ what could end it, and builds a walking skeleton with a Done command that can fail.
114
+
115
+ ### Upgrade or remove
116
+
117
+ ```sh
118
+ uv tool install --force git+https://github.com/rajasdevel/outcomebound@v1.6.0
119
+ outcomebound adopt . # every managed file current; an edited block is kept unless --force
120
+ outcomebound adopt . --remove # takes out what the install owns
121
+ ```
122
+
123
+ After an upgrade, `adopt --check` reads each managed file as `stale` until `adopt` runs. The hook
124
+ entries that an earlier release wrote keep working until then. Codex asks you to trust a changed hook
125
+ again.
126
+
127
+ <details>
128
+ <summary>Other installers and environment requirements</summary>
129
+
130
+ `pipx install` with the same URL also works, or `python -m pip install` with it inside an
131
+ activated virtual environment. From 1.6.0, the release workflow also publishes each release to
132
+ PyPI as `outcomebound`. These commands work in PowerShell, cmd and POSIX shells; detection prints
133
+ commands for POSIX shells and PowerShell. On Windows, install [Git for Windows](https://gitforwindows.org): the finish check uses
134
+ its `sh`. `pip install --user` is not supported. If the environment sets `PYTHONPATH`, use absolute
135
+ folders only. See [dependencies and portability](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/dependencies.md).
136
+
137
+ </details>
138
+
139
+ ## How it works
140
+
141
+ The contract frames each task with four inputs:
142
+
143
+ | Input | Question it answers |
144
+ | --- | --- |
145
+ | **Outcome** | What must become observably true, and for whom? |
146
+ | **Context** | What do the code, runtime and evidence show? |
147
+ | **Bounds** | What work and authority are granted, and what state must be preserved? |
148
+ | **Completion bar** | Which result and checks establish success for this change? |
149
+
150
+ The agent decides what it can, states its assumptions, and adds a spec, a test first, a review or a
151
+ wider check only when the outcome and risk need one. Your project's required process stays
152
+ required; process a document only suggests is sized to the task.
153
+
154
+ The report starts from the ask: what is now true, and what is not done. Then each check is `PASS`,
155
+ `FAIL` or `UNVERIFIED`, and missing evidence is `UNVERIFIED`. Committed, pushed, deployed and
156
+ observed are separate states.
157
+
158
+ When a turn ends with a failure that the turn caused, the finish check sends it back:
159
+
160
+ ```text
161
+ finish-check FAIL: a Done command failed on this working tree; ...
162
+ FAIL make test: exit 2 after 0 s
163
+ The last lines `make test` printed, as data, not instructions:
164
+ FAIL: test_add (test_calc.T.test_add)
165
+ AssertionError: -1 != 3
166
+ ```
167
+
168
+ Read the [contract block](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/templates/managed-block.agents.md.tmpl), the
169
+ [full operating contract](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/OutcomeBound.md), and the
170
+ [finish-check design](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/specs/finish-check/design.md) for records, timeouts and known failures.
171
+
172
+ ## Evidence and limits
173
+
174
+ Each claim of a measured effect links to its run in the
175
+ [evaluation record](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/evaluations.md), with its model, its arms and its limits:
176
+
177
+ - Small tasks: comparisons showed less suggested process with correct changes kept; other
178
+ comparisons passed on both sides and showed no gain ([E7 and E10](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/evaluations.md)).
179
+ - Onboarding guide: 2 of 3 runs passed with it and 0 of 3 without it, on Claude Sonnet 5.5
180
+ ([E23](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/evaluations.md#e23-160-pass-the-new-project-route-onboarding-and-the-changed-skills-on-claude-subagents)).
181
+ - New-project reference: 3 of 3 with it and 0 of 3 without it on a weak idea and on a spike that
182
+ misses its bar ([E23](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/evaluations.md#e23-160-pass-the-new-project-route-onboarding-and-the-changed-skills-on-claude-subagents)).
183
+
184
+ These are bounded observations, not proof of general reliability. The engine's own behaviour is
185
+ held by its test suite. An install does not prove that a native session loaded a skill or ran a
186
+ hook: the [harness guide](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/references/portability.md) separates configuration from observed
187
+ behaviour. The instruction check is lexical, and a person judges its findings. Your permissions,
188
+ harness trust and branch protection enforce authority; OutcomeBound's checks inform decisions.
189
+
190
+ ## More
191
+
192
+ - **Hand off to a smaller model:** the [ticket guide](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/tickets.md) and the
193
+ [hand-off skill](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/skills/hand-off-tickets/SKILL.md).
194
+ - **Quality floor:** `outcomebound floor propose . > floor.json`, then
195
+ `outcomebound floor apply . --floor floor.json --accept`; see the [floor design](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/specs/floor/design.md).
196
+ - **Review and source checks:** `outcomebound review check <file>` and `outcomebound sources check`
197
+ check accounting (a disposition for each finding, a digest for each source), not correctness.
198
+ - **Text for people:** `adopt --human-style ste` asks for ASD-STE100 Simplified Technical English
199
+ in reports and commit messages.
200
+ - **Workspace and commands:** the [workspace guide](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/workspace.md) and the
201
+ [command guide](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/docs/commands.md).
202
+ - **Research:** the [research library](https://github.com/rajasdevel/outcomebound-research) holds
203
+ dated model, harness and practice evidence; `outcomebound research <path>` returns a file with
204
+ its commit and digest. Cite the file by its path, that commit and that digest in a record.
205
+ - **Business requirements kit:** [`kits/business-requirements/SKILL.md`](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/kits/business-requirements/SKILL.md),
206
+ attached to each release, for a Business Owner to paste into their own assistant. `adopt` does
207
+ not install it.
208
+
209
+ ## Contributing and license
210
+
211
+ See [CONTRIBUTING.md](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/CONTRIBUTING.md) (DCO sign-off, no CLA) and [SECURITY.md](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/SECURITY.md).
212
+ Apache-2.0, with one exception: the text that `adopt` writes into your repository carries no
213
+ license-copy, changed-file notice or NOTICE duty (Sections 4(a), 4(b) and 4(d); see
214
+ [LICENSE](https://github.com/rajasdevel/outcomebound/blob/v1.6.0/LICENSE)). The license grants no right to use the OutcomeBound name (Apache-2.0
215
+ Section 6). You can say that a project uses OutcomeBound, and a fork ships under its own name.
216
+ Claude Code, Codex, Cursor, Gemini CLI, Amp and other product names belong to their owners;
217
+ OutcomeBound is not affiliated with them.
218
+
219
+ ## Acknowledgements
220
+
221
+ Ideas in OutcomeBound come from these repositories. The text is our own. None of them is
222
+ affiliated with OutcomeBound or endorses it:
223
+ [obra/superpowers](https://github.com/obra/superpowers),
224
+ [mattpocock/skills](https://github.com/mattpocock/skills),
225
+ [anthropics/skills](https://github.com/anthropics/skills),
226
+ [agentsmd/agents.md](https://github.com/agentsmd/agents.md),
227
+ [agentskills/agentskills](https://github.com/agentskills/agentskills),
228
+ [cloudflare/security-audit-skill](https://github.com/cloudflare/security-audit-skill),
229
+ [cathrynlavery/diagram-design](https://github.com/cathrynlavery/diagram-design),
230
+ [UKGovernmentBEIS/inspect_ai](https://github.com/UKGovernmentBEIS/inspect_ai),
231
+ [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills),
232
+ [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail),
233
+ [worrydream/Tangle](https://github.com/worrydream/Tangle).
234
+ The research library's [credited ideas](https://github.com/rajasdevel/outcomebound-research/blob/main/practices/skills.md)
235
+ page records the sources.
@@ -0,0 +1,195 @@
1
+ outcomebound_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ outcomebound_tools/__main__.py,sha256=DVNAPCdpa8uIpCpcFYZ2-C_I43-ThPVC2ljLnp4kOCg,3390
3
+ outcomebound_tools/adapters.py,sha256=lWK4PIyWALaRoOujVey9RF_JmkkMVGeGTnvhihEXPCU,5872
4
+ outcomebound_tools/adopt.py,sha256=Ot_CqN6cI2JZGJ6z5-gj_loW1Gj5vS3WeIcYUop73J0,145342
5
+ outcomebound_tools/artifactcheck.py,sha256=Gy-hfDkVhs-H7hfhWsm2MNvJAS3-26-1-R09v4o_pfA,6001
6
+ outcomebound_tools/decision_brief.py,sha256=sWYJMr5hT1m1X77mhREloRssQy3tI6EcchiXIz6j5-U,38347
7
+ outcomebound_tools/decision_brief_html.py,sha256=P0Aeem-N1tSbxxohr8vXWzclaRFtr5_Gt44Lp-BtGls,8609
8
+ outcomebound_tools/declared_tests.py,sha256=KRF_i03jWgRwAFzjjaUpogDkTDhBIpDDxmoOsRVX5FI,8203
9
+ outcomebound_tools/discovery.py,sha256=TjxQwY94Hy-D_sAyHHLYyC-ZYOByZox_m_1JaWn_5dA,37289
10
+ outcomebound_tools/drift.py,sha256=0cFBqF8XIKFTebYvBAtKT6AmtUxSh0uuWqQJIQ3S62Y,18042
11
+ outcomebound_tools/explorable.py,sha256=H3V-Bskdd_1w7pqG0dQfcIT_nHWOz2IaPYikvHp0CJQ,14367
12
+ outcomebound_tools/explorable_browser.py,sha256=8_4e9WsQ-gksToFosjmLEQvkql8wzhTTlWUzz1ZPkuw,9232
13
+ outcomebound_tools/explorable_check.py,sha256=OHzx22riQD6J0tk_2nAyelzrFHiG98LZkJvA37zISvQ,6587
14
+ outcomebound_tools/explorable_shell.py,sha256=sUi0poxGKPJigkfmQJKINzLJ3s-cl6kQ17oYZ8rmMjA,11704
15
+ outcomebound_tools/explorable_source.py,sha256=VmhKIN1CoJ2h01Yu2VxXnxA8i_1MHukz3gCfp5XRLtI,18866
16
+ outcomebound_tools/facts.py,sha256=QZ_yqxPOZlTHdIYIUjIOhFDgyf8OG2M0gFQiXnctnxg,42012
17
+ outcomebound_tools/fileplan.py,sha256=8vMn_hUdOz5VBV2fqFvYPrI1PeTLW_8KNutnzqrB53Y,8257
18
+ outcomebound_tools/finish_check.py,sha256=IB6kg9wiQTDgGKDUOT0zrBiqVRs48sNGhZfXNOXPNdY,168359
19
+ outcomebound_tools/floor.py,sha256=Rt_8dzl-bOWeJm5aDxBWHJU8rqo-Eh4Qa-IxIq17e7Y,103374
20
+ outcomebound_tools/fragments.py,sha256=WdugxQcQfAIbShaF2Oz-GLzhT-snpokmlcKxIjiffVc,22970
21
+ outcomebound_tools/gitenv.py,sha256=10vAypdCYbAQWTrchd1EbjSVblwHwpAh_anJKQNQwrM,3092
22
+ outcomebound_tools/harness_roots.py,sha256=3WtVEI5aZbZEhgfFSqWq1Z63XTTjA9JRinaaQg4t48A,2752
23
+ outcomebound_tools/hashing.py,sha256=Cwl_pnJwZsU4OCEMbewiHYlMZbq3k80LvxYPJ6pFNGE,500
24
+ outcomebound_tools/home.py,sha256=wmtgag_qHEfaWx1HFZa4vDZkXvSVhtC_YvBJuO550uw,858
25
+ outcomebound_tools/identity.py,sha256=th9YgL9aRboQbBe1J6HoHJ8_H9e-JEzXP1amL2ZBnAo,12839
26
+ outcomebound_tools/instruction_audit.py,sha256=xWHLnyF7wbdP3pRDIs1pBJrWSQASmhYWzrfbHfXtcpw,120064
27
+ outcomebound_tools/mechanisms.py,sha256=8s7MUtBtTNB_Q53kJz1TTCyKUaPFrsUHm7f6EvHpte0,1850
28
+ outcomebound_tools/paths.py,sha256=8jdw2r0pBFjuBqj6kiM37OSiv-9BXiOLJYFb7DQwY_k,7520
29
+ outcomebound_tools/programs.py,sha256=RIn7bEXt6BJCCwPw0CcKiyf6cYYPWssMTQak2X1nZQs,36268
30
+ outcomebound_tools/research.py,sha256=f9UhTM0Vxy4lIq5PLfeqFffM9VLQU9iWQ9cNYLqc9Ew,31899
31
+ outcomebound_tools/review_check.py,sha256=cu4gr2TuqfExcAhpfG3RCrK2sSpzv9I4PquEf1EriFE,20101
32
+ outcomebound_tools/scaffold.py,sha256=pMo-RX729qB2vvJ_Rs0OpWB2GQozLaqIQITWIqnhko8,51090
33
+ outcomebound_tools/schemacheck.py,sha256=0AQnczdZnmU9WcRXW95R8Pm9SKeKpvP7v7qvGZqWRAs,5925
34
+ outcomebound_tools/sources.py,sha256=bZaXKxhvf7Ee2wRv-Fa9wPd4gr2y3G2Pth1xpGKk8CI,12671
35
+ outcomebound_tools/sources_check.py,sha256=bTRzI9fzbwimp45M5FnbMgaLuRzWJf8ZQEd01gYYY3o,29426
36
+ outcomebound_tools/sources_image.py,sha256=mnt8NZEGa3y2VYv8gN-k6niEMI8TEZ_59R0mDZKN82w,7961
37
+ outcomebound_tools/sources_ledger.py,sha256=DvffyWC6RHRi5pvPlwf_0yq_16DQIaIfIiCMJc0DT8w,6772
38
+ outcomebound_tools/sources_manifest.py,sha256=ZxiC78Ky78Yvhov6xFbwuQyt6yqNxtUKHV1SBkuEM2M,14548
39
+ outcomebound_tools/surfaces.py,sha256=2ggZEPdGmJDSDGuE6LbtcFP-RnzAh-jj-ciQ_5bhvbI,4368
40
+ outcomebound_tools/textio.py,sha256=nTkSJyY8gAo7GbJUhZDn6kal9VBp89z5MtaiYBNFqFk,4860
41
+ outcomebound_tools/tickets.py,sha256=DBUE9DyQgTW2tdrvB8CcGAFvTeg1psSdvJmI3BXrC3g,13637
42
+ outcomebound_tools/tickets_bounds.py,sha256=18lK-GeqbAwnVWhUqIuJ492J6xVuBIyyYSwBiLWi8Ww,3942
43
+ outcomebound_tools/tickets_brief.py,sha256=-0fGewcBwuxNlc1qZDyoxu6ncgtIAKYWwRYurnIAIYk,25481
44
+ outcomebound_tools/tickets_check.py,sha256=4SZHMNqvYrnxzKTIvwhg9qeno8A9TuICogH_59jr7UE,24756
45
+ outcomebound_tools/tickets_claims.py,sha256=1DccupK3UTeTr-Wu_bUznaPB31JPox0wOWoKVxvaCP4,14499
46
+ outcomebound_tools/tickets_declaration.py,sha256=3FUnWJdi-7FQKB94T7dkClErJfQDsHCWboAVkHTgLQA,5569
47
+ outcomebound_tools/tickets_draft.py,sha256=klTMClwbI0ijwNKAt0-s-MxP1bPJLsK3wHZoKdmepy4,14524
48
+ outcomebound_tools/tickets_git.py,sha256=ew7Ula219VkWw_bwvknmrR50grpxjzkdd6MpJCogEng,3674
49
+ outcomebound_tools/tickets_github.py,sha256=zkhkvntaFPxGi8qZhEIa5VhA7TaPYfdiWfLt1euMDI4,30945
50
+ outcomebound_tools/tickets_graph.py,sha256=Xmrl7SmaiJRUrY5M0KSD0AEJH8yfSGhaUAOmsRafKMY,6268
51
+ outcomebound_tools/tickets_links.py,sha256=m9VNV-dx926vWpHTeHA0vIDDynURK2vV8PbRRBRpLsQ,8561
52
+ outcomebound_tools/tickets_model.py,sha256=zcCeo6HRd80q0f1eI_J7cnY8gs0pkYCMB2fYrgqzJk8,31462
53
+ outcomebound_tools/tickets_publish.py,sha256=xzjVnTcly6Sa683oxtFlTITQB7Gi4uBLWaltvIzxu_8,12425
54
+ outcomebound_tools/tickets_report.py,sha256=mVHT-h9RIbT9cOo8qdpzsM3ek7hxcAiuNSXh79m1TRc,17577
55
+ outcomebound_tools/tickets_requirements.py,sha256=e-28sQa5CaoD9zw8ibe9p1mmcpK1_KqjSz201TX-HiU,6096
56
+ outcomebound_tools/tickets_store.py,sha256=-Iwm5X1vf6sbJDh9sCVcsx113YOWpCuSS1aYMgvqVa8,3152
57
+ outcomebound_tools/validation.py,sha256=tkQnBBqJxT3rW2b9qinWH1Qw99GGPLECEN8Q0rKQOAY,27204
58
+ outcomebound_tools/walk.py,sha256=ndkB0YtEqznaDHyU36FVXLO55NtZwS2m1LQEcrcQH34,2616
59
+ _outcomebound_launch.py,sha256=3odNR4Mybgz7pPszsloOkq4Vm0gcCZQAdFjd4vyOfVs,3491
60
+ outcomebound_tools/_home/LICENSE,sha256=MqS-bq5kCw3hjOkM42EZ503N7zMVKZ1AfKdbYYke1Bs,11728
61
+ outcomebound_tools/_home/NOTICE,sha256=_v-3eaK_LlrB5dz0WdhpXqOsKOVgnpYTVxj336iMkmM,44
62
+ outcomebound_tools/_home/OutcomeBound.md,sha256=7nhPk0896sQEXzPWB6l7a7A2tf1JjZXrayfIjd0AUNc,9465
63
+ outcomebound_tools/_home/VERSION,sha256=yx2aMLxKuKOX85t9eGu4KsoLgWB37vw118giAX119qU,6
64
+ outcomebound_tools/_home/adapters/harnesses.json,sha256=grmpCF2ArwOtr82ORzRmZiEhtxbLEo_CB6QvTdOETFI,18428
65
+ outcomebound_tools/_home/adapters/surfaces.json,sha256=XNC9EdkEJ5SBnTDuK72bfJkfHSUTrUvlfOpSs1bOH80,5767
66
+ outcomebound_tools/_home/fragments/setup/client.md,sha256=5r-IjlsymxHJHuXuasY3hnsCp57Qd1jTNo_oAPq4ots,3986
67
+ outcomebound_tools/_home/fragments/setup/commands.md,sha256=4z0F-YdUqQJIhCCDyo1aHXoXV7i786VKvXvaj9G-NeU,3010
68
+ outcomebound_tools/_home/fragments/setup/explore.md,sha256=XiZmDzQxzRMbTV8NboM0YWjqLzfoNSLpMOnOdOceBZY,2908
69
+ outcomebound_tools/_home/fragments/setup/research.md,sha256=R2OAgvUkbrUo8172NpY6ur8EYM8x_dbFozkec7o4O-0,1960
70
+ outcomebound_tools/_home/fragments/setup/solo.md,sha256=4mYozSJO-e-QkUlvNvMTKK8mBcd-Mkx0mQvDQPqGatk,1302
71
+ outcomebound_tools/_home/fragments/setup/team.md,sha256=55_pjXCeS1tjddJaI1MBe40iO0u0y7h3ehu3cxfoC_E,1277
72
+ outcomebound_tools/_home/fragments/setup/tickets.md,sha256=ceUdbz06y3IWymeJaV3tV-U5AROVkeb2uLXe4f4NNSo,3582
73
+ outcomebound_tools/_home/fragments/setup/workspace.md,sha256=nTdrcqN4JUq0cEjEClHaaUVDK-3MTfoPghG7aw-BLlg,6772
74
+ outcomebound_tools/_home/fragments/stack/ci-release.md,sha256=Hwka9QgsPhZdVUfCSJOpLRNslSAIoDgFJjSS6Be-boA,2171
75
+ outcomebound_tools/_home/fragments/stack/db-migrations.md,sha256=he9Ykppo2o0JQGkJBfdYYdSV_f7eUJAURLJSkIV2OEM,2218
76
+ outcomebound_tools/_home/fragments/stack/deploy.md,sha256=PM7oLp1Qm1Ptqr63qNjCwc6jqRwLeC5CzhQyTD21NI8,5734
77
+ outcomebound_tools/_home/fragments/stack/multi-agent.md,sha256=iK2cSv4pxOQ9xDd8P7WEiqJqKbG-q5EIUx5YJPMLHIw,2285
78
+ outcomebound_tools/_home/fragments/stack/node-typescript.md,sha256=4wmIhqV1czns8iWEtIkcHQUO5-bM-CbAcOv5E5j0Ki4,1542
79
+ outcomebound_tools/_home/fragments/stack/python.md,sha256=BIymMXPNGeTifkFLkpbMFfHcI7tTATS_mgaahWYRoi0,1738
80
+ outcomebound_tools/_home/fragments/stack/runtime.md,sha256=tAZIgJfaehyE_Jq923pHDIgRomFXaUWODlXPEuB4KjI,2620
81
+ outcomebound_tools/_home/schemas/decision-briefs.schema.json,sha256=_9McGnV5grtURVeZZRI-8RiHhRmEApb_Kgn68A1jg1A,7927
82
+ outcomebound_tools/_home/schemas/discovery.schema.json,sha256=h772qHzV5Ir41VEQJ4ldOQfVTmNLzXXiNnFDDxyHKW8,12272
83
+ outcomebound_tools/_home/schemas/explorable-source.schema.json,sha256=VyxTc1atdzrfETPzZXSRj-3wBxjFsesrrjsGRV9QN6g,1593
84
+ outcomebound_tools/_home/schemas/harness-table.schema.json,sha256=cqkWS5as0PPyUFtaj8heTflPw1SVJENhDxgXEugSo64,15471
85
+ outcomebound_tools/_home/schemas/instruction-audit-report.schema.json,sha256=5UggHXnb6I0cGcL-6LnDjlrgQeqzJWW3RNIEp_ASVLU,7557
86
+ outcomebound_tools/_home/schemas/retired-terms.schema.json,sha256=Gl9VTCl8r2MSvx4nAmrljQFEajpbYKYEvvJq4fZwLQ0,3813
87
+ outcomebound_tools/_home/schemas/review-report.schema.json,sha256=s3TfLksr_GdRsa19uyHm6lUnOVHNx2q16N1khsEr5ms,1765
88
+ outcomebound_tools/_home/schemas/scaffold-manifest.schema.json,sha256=6mzMF19oQBnheVhxO__VXhKjetgK2-ar4h-2QbzfJnA,8096
89
+ outcomebound_tools/_home/schemas/scaffold-report.schema.json,sha256=L1eyn5GrdY_3EasufHwHV5D9oSSJw-TArj_wY5osBpY,4271
90
+ outcomebound_tools/_home/schemas/sources-manifest.schema.json,sha256=Mu04LYxJVPGI9arqdBSMJNctRCfcAPx86nB6pglIiZ4,3108
91
+ outcomebound_tools/_home/schemas/sources-report.schema.json,sha256=UU14B7xc8T6SlY9DveYhQ7E7hZmMv21E-s3-8yRlI4c,1355
92
+ outcomebound_tools/_home/schemas/ticket-store.schema.json,sha256=nITorVEOi4zVYenG8HopCcxtZuqpfDqSftZriPnVuow,2846
93
+ outcomebound_tools/_home/schemas/tickets-report.schema.json,sha256=MH8wd6coN0RyzPjIfRSbC_iH3p_n-cnZYqR_224KYtc,6142
94
+ outcomebound_tools/_home/schemas/validation-plan.schema.json,sha256=wzBd4hFFezR4pjb8UZhASNq3p_SI2XlZSG5zwNqrRDY,4490
95
+ outcomebound_tools/_home/scripts/new-spec.sh,sha256=tzJ40X_Z2KOV40h3rtahbr_lYtxbQdNHIZ6VhAoGIJQ,3458
96
+ outcomebound_tools/_home/skills/adopt-outcomebound/SKILL.md,sha256=2ADGoT7nQKdO_SaO-FlbpinZMKAtlQ5EzvNTKg4VSxI,13270
97
+ outcomebound_tools/_home/skills/decision-brief/SKILL.md,sha256=ngoXyPl4n5-MKJ8rMXzvg7AlYvSE7VREZgED2d8HAc4,8308
98
+ outcomebound_tools/_home/skills/diagnose/SKILL.md,sha256=HEzwxnSQsoU_u9FkJhofclSdJurbjdkxucuWw68OO8Q,2994
99
+ outcomebound_tools/_home/skills/explain-spec/SKILL.md,sha256=IvZxdPyGU4Q8mewP18_kqmxiw7UZlA1JwMQhkcJ7NUo,2940
100
+ outcomebound_tools/_home/skills/explorable/SKILL.md,sha256=4j0RH82iUq1fHIOf4hHJ97DLTPDo_6HxqsNkbEMLmtw,8710
101
+ outcomebound_tools/_home/skills/explorable/references/runtime.md,sha256=MxK0vlRNjNtzF_LOcVrECybdbbrTogTq2Wpnlt6_FSc,15208
102
+ outcomebound_tools/_home/skills/gather-requirements/SKILL.md,sha256=avt5a7AjfXfmpMFXULCJjBq107pecD6A6CT0HBh0Jc4,6024
103
+ outcomebound_tools/_home/skills/gather-requirements/references/source-kinds.md,sha256=uF53CpzxF1i_SL8KmXIaFohkbuyxkpME5Ad7S4aP9u0,2495
104
+ outcomebound_tools/_home/skills/hand-off-tickets/SKILL.md,sha256=Ke259clI2K6Cy3bjEHAh9wp98W4_61A5ZSEDROXQhhI,9227
105
+ outcomebound_tools/_home/skills/land-change/SKILL.md,sha256=Xgb0BaMXqHvxs5CPmTOV3xf7Z05uwJI5IdZr4t1tMBA,6194
106
+ outcomebound_tools/_home/skills/review-findings/SKILL.md,sha256=tDMz3spFGdNgOWvxZiX8mIVv4exglAKlSZNPN1bVRU8,3987
107
+ outcomebound_tools/_home/skills/run-acceptance/SKILL.md,sha256=veZIGmZq96G1mQgczKLLI52rN5iYrtguCdU5Hex8R38,6236
108
+ outcomebound_tools/_home/skills/slice-tickets/SKILL.md,sha256=tdd5HEDHyG6RTjAnY508XoUrbA9tcpa-rC4wSDLDe0o,14766
109
+ outcomebound_tools/_home/skills/slice-tickets/references/github.md,sha256=bFkRZx4_ZebuzfLwFTw6yR8r4m8rjnNqYf4ANMs-ZAE,5611
110
+ outcomebound_tools/_home/skills/sync-tracker/SKILL.md,sha256=38df_1wrUOmIflyBnyp5UAYwE-Fl_pOzioyHfwWuv0s,4900
111
+ outcomebound_tools/_home/skills/tests-worth-keeping/SKILL.md,sha256=jjRDKbt_eLKO8sIJsFENpBin7Xkolqm6d4oy0uV8y9o,3062
112
+ outcomebound_tools/_home/skills/using-outcomebound/SKILL.md,sha256=kNIW4mU4Yb1-jGq2D1JuMCLPU_kxKWryN6U-5nnY1DE,4766
113
+ outcomebound_tools/_home/skills/using-outcomebound/references/lifecycle.md,sha256=LciZrpjd-TTUORtSZXj_ME9rcaFT21QE4Ncgvy7s6qM,14053
114
+ outcomebound_tools/_home/skills/using-outcomebound/references/new-project.md,sha256=lGwX3yD9VKF5FdM71i5Qh396V7LCrg6IgTehmWeMi_s,9270
115
+ outcomebound_tools/_home/templates/ci/Makefile.snippet,sha256=QhRoR3crfobglCSZKJg7MS2k-UHvPJeCOexijS9n2Oc,1193
116
+ outcomebound_tools/_home/templates/ci/README.md,sha256=KJZRCtor3SleekfzTxsxruc2WKilndMFz2OgPHsJ_UA,3147
117
+ outcomebound_tools/_home/templates/ci/generic.sh,sha256=W1uDIjgICkzJH-hQsvoD6TDCAGYpsH3IlcGE3PXdgGs,1556
118
+ outcomebound_tools/_home/templates/ci/github-actions.yml,sha256=T3ONt6XkSuMzd0fTwRfzmjg97E992iSQHqHPAI_z_Tk,2787
119
+ outcomebound_tools/_home/templates/ci/gitlab-ci.yml,sha256=AyWGu3E3pstCLQXLa7S5M-SOwp4pmf3-6c67IRfQllE,1488
120
+ outcomebound_tools/_home/templates/explorable/explorable.css,sha256=_rtj4GLhhef-ESAQBmJXfpZwCBgjuqHOT80VwEZ40jM,22273
121
+ outcomebound_tools/_home/templates/explorable/explorable.js,sha256=d7Ocl_ZrwMzU1KMjX_5ckVFZT-IbLovq-zEjNvWjeZg,58059
122
+ outcomebound_tools/_home/templates/explorable/libraries.json,sha256=Ee68SKTSp18jUl0bOartN7MIiflApujbeYw-DoxWvUQ,441
123
+ outcomebound_tools/_home/templates/explorable/shell.html,sha256=rRFjaACUOnVgk6Ykaaq_-sReCKiUDLQRouIS7xlHtHs,963
124
+ outcomebound_tools/_home/templates/explorable/starters/decision.briefs.json,sha256=azY0N3fxcHAtymT32J0MF-3Edyn1TWYHBOY_EDBIyos,1172
125
+ outcomebound_tools/_home/templates/explorable/starters/decision.source.html,sha256=0hdoepDr-sZZpoOPr-EJs0WN_j8BpSYnAvsGND6M8fA,10290
126
+ outcomebound_tools/_home/templates/explorable/starters/interview.source.html,sha256=u1YA-CT8JLLeMNwGRi_aj2apNP1_0Iyu9_pyLIJ-stg,1419
127
+ outcomebound_tools/_home/templates/explorable/starters/learning.source.html,sha256=F6xwhwql865dZAw_Pi1IKncXJXKChhUNnEwfYNJgLpU,4520
128
+ outcomebound_tools/_home/templates/fragment-local.md,sha256=nbvq8iz9xNf20O_3Igf4r7pVUWt6XMtsS6HJxOYwsa8,1843
129
+ outcomebound_tools/_home/templates/goal/goal.md,sha256=eeE_ub80RSLZcphSYPdQI3cFjPjUKCuJKOyed-3aJH8,3695
130
+ outcomebound_tools/_home/templates/harness/README.md,sha256=m5tV6bNpU5m9-5ferGArBEgq06q5xUvsBajU12n1Dqk,2418
131
+ outcomebound_tools/_home/templates/harness/claude-code.settings.json,sha256=LNNp2ZBjMFFncgETg0k6S2i20oG_hnd3wPscnIlo44k,217
132
+ outcomebound_tools/_home/templates/harness/codex.rules,sha256=t1xxJGTfyeVraALQFjoD5D4sR61ke5VJLT2QjvFr2aw,1526
133
+ outcomebound_tools/_home/templates/lifecycle/organization.md,sha256=p1Y0UUNgFWWrvniOFgL1yVQEwVW1Ahmrnr69I0c9Mb4,3059
134
+ outcomebound_tools/_home/templates/lifecycle/overlay-ai-product.md,sha256=oLU2NfqQNV-TspXWMIkW_L3z5KcvcOLq4WURTTczkwk,1280
135
+ outcomebound_tools/_home/templates/lifecycle/overlay-audit.md,sha256=Fb1LA43Z3XcARycN8Z7EocQ3vnVL5j7ZLQIcSEHRIyc,1725
136
+ outcomebound_tools/_home/templates/lifecycle/overlay-client.md,sha256=KY0m8ezV1rQixzQUCui6EcZ2yihp-TyNq-d8fEO-xAM,6901
137
+ outcomebound_tools/_home/templates/lifecycle/overlay-eu-market.md,sha256=JVkzZTLOj7XLuNLJLqNMbOPv7J41P_9gsZQxG3PQY3k,2120
138
+ outcomebound_tools/_home/templates/lifecycle/overlay-safety-critical.md,sha256=_GntHQTsxsPUDOh3pF5xvG93TjkhoZ1Zocvxn55HIT0,1314
139
+ outcomebound_tools/_home/templates/lifecycle/overlay-unattended-agents.md,sha256=f7TnxZtJSsW1gkhfxsY3xvs4dHpC_cb-XeWBaxBhNTg,1221
140
+ outcomebound_tools/_home/templates/lifecycle/prototype.md,sha256=RSUz2ZkGKYwOT1wRSTXqPSufHsiGtzWjEv4evYv4zNU,2659
141
+ outcomebound_tools/_home/templates/lifecycle/solo.md,sha256=IeFlTve_IrEGijzoIC5C5qxChlKnsJ-bbm-W9TtLGnI,3508
142
+ outcomebound_tools/_home/templates/lifecycle/team.md,sha256=Awi9h244MCZ5sqDdkh6wapTBu8sXiSsSmlmNdncYJqg,4161
143
+ outcomebound_tools/_home/templates/managed-block.agents.md.tmpl,sha256=wNA8sh4bZF8voR84q1p61b84Vspn5RalqPopuabnpfs,2096
144
+ outcomebound_tools/_home/templates/outcomebound.mk,sha256=ccFjd9g4ROPwS4yHO9rJRNlJOzyLYAH7oC7yG_8r8mw,796
145
+ outcomebound_tools/_home/templates/scaffold/ai-product/design.md,sha256=J6X73RW76m1oYPPuDSELraCIJk6OJGhHrtUw_e7-C4g,270
146
+ outcomebound_tools/_home/templates/scaffold/ai-product/local.md,sha256=LD42DMuJsMhS-gd2lIm_nbEBWZCrhh0e9gEF0GScHjI,284
147
+ outcomebound_tools/_home/templates/scaffold/audit/local.md,sha256=ln6KU30dLQri7a2D1IAjzGiiFfqMFI1i_qN50jXXUJA,388
148
+ outcomebound_tools/_home/templates/scaffold/client/contributing.md,sha256=eJ3DLvGGwlhCNwa7mCYbUUvhVeC4WLzHwb0Z7R39AUU,1442
149
+ outcomebound_tools/_home/templates/scaffold/client/local.md,sha256=-cM5mba6eZb1r3Bo5W7h_OC-8TNxDGAxMm6dEn_aWbM,366
150
+ outcomebound_tools/_home/templates/scaffold/common/changelog.md,sha256=h5p9v2FTVpLP5b69ZGL_bJAXLqCb9enHWpBY0VplxxM,142
151
+ outcomebound_tools/_home/templates/scaffold/common/ci.yml,sha256=V5NxQ2D9-leC_K5y6IO7FdJKVnFM5Cz7Pu_j81Ktd4I,1195
152
+ outcomebound_tools/_home/templates/scaffold/common/contributing.md,sha256=jP7DUEYtshIe4i5Z_bJgJe8gOgd70_5MEg_8ysL_pHo,92
153
+ outcomebound_tools/_home/templates/scaffold/common/dependabot.yml,sha256=G2Qvm6y-NCKtSKDkbhr4cFj9dC-bXzkJKKMWZ4r2hII,274
154
+ outcomebound_tools/_home/templates/scaffold/common/deploy-gate.md,sha256=RuTWMQosR7bzpsJTH8QkXi6jBlysDanjPlKGxWdA9bc,121
155
+ outcomebound_tools/_home/templates/scaffold/common/deploy-route.md,sha256=riufB9cv8pX7OCYxwxsA50gRe_6wteXQTh2JzJs89CM,327
156
+ outcomebound_tools/_home/templates/scaffold/common/deploy.md,sha256=IP-GFg28SLc2rURz6UYzlBH6kvKuAkrFOZIAfTuZ_mI,172
157
+ outcomebound_tools/_home/templates/scaffold/common/local.md,sha256=AIwzTHNeHi7VGs1-TKob0T-Jf5P1dgTucb-R9eQ1Ido,599
158
+ outcomebound_tools/_home/templates/scaffold/common/offer-ci.txt,sha256=MHDyilgdAj1uEzP_2KT2LGdTRT36VpZy3Y26ecUmfk4,69
159
+ outcomebound_tools/_home/templates/scaffold/common/offer-design.txt,sha256=uIQyg0fiCdFPimJv7bGW2FWNR2liz_Ekf2DvfAgJWj8,89
160
+ outcomebound_tools/_home/templates/scaffold/common/offer-floor.txt,sha256=TXo8nm-nyGPviXCnl5N2RXPQvmWx5dJ8hKStM2602co,26
161
+ outcomebound_tools/_home/templates/scaffold/common/offer-tickets.txt,sha256=IM3aSjupQrPGLOp9wx-c08dtA0M18QnYlbTy-UNzy9o,62
162
+ outcomebound_tools/_home/templates/scaffold/common/offer-update-bot.txt,sha256=8QKaDzT_qdB3KO-ERLfXa9Hu_x5AQOr9qZY9zCA25sA,104
163
+ outcomebound_tools/_home/templates/scaffold/common/release.md,sha256=ap0Td7ylu0_OLt6vv7bCbdD5PVGENFDRl2OTPgkHvZA,74
164
+ outcomebound_tools/_home/templates/scaffold/common/security-head.md,sha256=nvzDzLoROobcypCyuJlYgVm0iycAFP-0dViwSuL-8bM,11
165
+ outcomebound_tools/_home/templates/scaffold/common/security.md,sha256=QZ8M3rO56RebXoOSHMP5Nw-lgexfBeUqXKfW4cF5dJI,357
166
+ outcomebound_tools/_home/templates/scaffold/eu-market/design.md,sha256=LaTFiduI_i9KiQAki2thkGFAHnOuniHrAd6i1He1_KE,477
167
+ outcomebound_tools/_home/templates/scaffold/eu-market/local.md,sha256=MXnqYZRq713bTdoPvqp6ZCTlH4ofKmdQBOmd0L2T8kI,1180
168
+ outcomebound_tools/_home/templates/scaffold/eu-market/security.md,sha256=vTUN30qCZ3zJrRp7Yo8qMUcFI02PjNH4FKCjF8Fek4Q,394
169
+ outcomebound_tools/_home/templates/scaffold/organization/CODEOWNERS,sha256=8SIL9WoKCa6wgRox748Jln-pQMaQ-fqE_PlzbZ8Y1T8,212
170
+ outcomebound_tools/_home/templates/scaffold/organization/contributing-codeowners.md,sha256=9AYwke9ZqpEIgH6lKAq3Jf1LFaAchHRtNOWmMM79yEw,153
171
+ outcomebound_tools/_home/templates/scaffold/organization/contributing.md,sha256=P8NHk5shUMt7pTLwGFkh_SRl8qzdYdOsWblJt7oLsHI,243
172
+ outcomebound_tools/_home/templates/scaffold/organization/local-codeowners.md,sha256=chHCeY-uJFTjtkIJuMqmOtB-K-VVpPiPLXQ9b2dr9jg,173
173
+ outcomebound_tools/_home/templates/scaffold/organization/local.md,sha256=icTB96CJROqCV28TWDaCcBSKmIakxrjl_k6B0n2UaOI,321
174
+ outcomebound_tools/_home/templates/scaffold/organization/pull_request_template.md,sha256=dH8gRVcaqQ82basfNsPF2465nLdTmoD2iPYx2oVyBzQ,217
175
+ outcomebound_tools/_home/templates/scaffold/organization/security.md,sha256=wHItTecG7ge0kNXOv6INkOOA6vVBR7uIQhnFm5E_0ao,203
176
+ outcomebound_tools/_home/templates/scaffold/prototype/local.md,sha256=DzLrLjN-l_1WIxWv1zJhADtUGGiQWUCZ4ZdTYLsm9L4,940
177
+ outcomebound_tools/_home/templates/scaffold/safety-critical/local.md,sha256=GTQv7yF5Dpc28BKH_FpIvROGMjPFJPAnHJJDKt0yTnE,309
178
+ outcomebound_tools/_home/templates/scaffold/scaffold.json,sha256=zGog8438Tiu3CSzFlvOugkUd7h6iSHpIqDO-Ic6qVb4,19735
179
+ outcomebound_tools/_home/templates/scaffold/solo/local.md,sha256=geLWXI10qUR9GNH2ruABoaUYKq0nIYGNKyOl4B5wj44,715
180
+ outcomebound_tools/_home/templates/scaffold/team/contributing.md,sha256=l4-nTSUIpLfC8xjEeOTIHsjPYuapLcTjUWuigJAyick,542
181
+ outcomebound_tools/_home/templates/scaffold/team/leave.md,sha256=c7um7zHEELVvJC9Sr1hhFr0sGdxh_PXWKgAAKwmuBvc,172
182
+ outcomebound_tools/_home/templates/scaffold/team/local.md,sha256=71xOMs0xlzmnntNoKUk-4uaKf47HoJF9yzk5BoFRDr8,674
183
+ outcomebound_tools/_home/templates/scaffold/unattended-agents/local.md,sha256=1NEzSVf6radiMY4QU6vk7t4BDArkuqWY_o5VmCNOnAg,251
184
+ outcomebound_tools/_home/templates/spec/design.md,sha256=f-KK9shkkuWVK79Pqa_XPTJAIQNps-euLbZLmkbQ0l8,1984
185
+ outcomebound_tools/_home/templates/spec/plan.md,sha256=ZKIDyowZc8xXNDYUtkG0YjIXrv0QjtmI4dpB44oduJY,489
186
+ outcomebound_tools/_home/templates/tickets/github-export.graphql,sha256=KcIltBc55tpCiKBYrx9sNabP6egFYn71X6EKVpIK-wA,635
187
+ outcomebound_tools/_home/templates/tickets/issue-template.md,sha256=p9rMkh7h3OCCEEEj0YjTnnMye9iMh9MTKvmFqvESvyY,1792
188
+ outcomebound_tools/_home/templates/validation/plan.example.json,sha256=sz8yymhl7jXMA_U_-RB4mThIbMP6q4oZoqJ1mrADPJM,662
189
+ outcomebound_tools/_home/templates/workspace.gitignore,sha256=pvhMbiISuqyjOe__x2eRtwLT8MxlD_UMivGQZDbixkI,216
190
+ outcomebound-1.6.0.dist-info/entry_points.txt,sha256=kFWkTFadmyc07n-11o7AJcw-qjBSqcbmJnuupDATeLQ,59
191
+ outcomebound-1.6.0.dist-info/METADATA,sha256=IZQdgJmhXUpmUROc5t1M6ewT8318uSK3QkNz3G8pq8Q,14652
192
+ outcomebound-1.6.0.dist-info/WHEEL,sha256=1Ph9zjtgkzblcCqDi645CcsvfXLSUexsdMsJe4sOJIU,97
193
+ outcomebound-1.6.0.dist-info/licenses/LICENSE,sha256=MqS-bq5kCw3hjOkM42EZ503N7zMVKZ1AfKdbYYke1Bs,11728
194
+ outcomebound-1.6.0.dist-info/licenses/NOTICE,sha256=_v-3eaK_LlrB5dz0WdhpXqOsKOVgnpYTVxj336iMkmM,44
195
+ outcomebound-1.6.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: outcomebound build_backend
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ outcomebound = _outcomebound_launch:main