Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9839e2a
docs(proposals): P-026 C# strictness retrofit profile (own audit stri…
claude Jul 4, 2026
3f82fe7
docs(proposals): add P-026, resource state machines & stale-async-wri…
claude Jul 5, 2026
809c902
docs(proposals): P-026 — split ASYNC050's type-level fact from per-me…
claude Jul 5, 2026
01ff4b8
docs(proposals): P-026 unneeded-dependency profile (Own.Lean)
claude Jul 5, 2026
9cd10b8
docs(P-026): YDN002 needs new generic-preserving DI facts, not a free…
claude Jul 5, 2026
9cf6411
docs(proposals): P-026 agent memory & policy layer (.agents/)
claude Jul 5, 2026
c66df2b
Record CUE-over-TOML decision for owen.policy authoring
claude Jul 5, 2026
c84f366
Point Sandboy's policy doc at the CUE authoring pipeline
claude Jul 5, 2026
dab92f1
docs(sandboy): cross-link 007 loop-canvas for the gate/run integratio…
PhysShell Jul 5, 2026
7f89d54
docs(sandboy): label --report and sandbox_policy as not-yet-implemented
PhysShell Jul 5, 2026
dbe8702
docs(sandboy): sandbox_policy must fail closed, matching 007 loop-canvas
PhysShell Jul 5, 2026
14411a4
docs: add agentic coding discipline proposal
PhysShell Jul 5, 2026
64f4e67
docs(P-010): restructure Own.Types around the five-pillar taxonomy
claude Jul 5, 2026
d78c13d
docs(proposals): add P-026 naughty-strings robustness pack
PhysShell Jul 5, 2026
a6d906c
docs(proposals): P-026 project resource model files
claude Jul 5, 2026
96238ed
docs(proposals): widen P-026 index title per review
PhysShell Jul 5, 2026
b332489
docs(proposals): spell out Layer 3's failure contract
PhysShell Jul 5, 2026
9ae499a
docs(proposals): P-026 — bind to existing OwnIR resource kinds, not n…
claude Jul 5, 2026
2470ba7
Create P-026-own-arch-facts.md
PhysShell Jul 6, 2026
66fc8ad
Create P-027-probabilistic-data-structures.md
PhysShell Jul 6, 2026
cabc2b2
Merge remote-tracking branch 'origin/claude/csharp-strictness-retrofi…
PhysShell Jul 8, 2026
77478ba
Merge remote-tracking branch 'origin/claude/own-effects-state-machine…
PhysShell Jul 8, 2026
6371321
Merge remote-tracking branch 'origin/claude/you-dont-need-proposal-5p…
PhysShell Jul 8, 2026
48c7172
Merge remote-tracking branch 'origin/claude/agent-learning-system-doh…
PhysShell Jul 8, 2026
6fc0632
Merge remote-tracking branch 'origin/claude/zero-trust-framework-007-…
PhysShell Jul 8, 2026
33901c1
Merge remote-tracking branch 'origin/claude/loop-canvas-007-sandboy-m…
PhysShell Jul 8, 2026
ef1e5e6
Merge remote-tracking branch 'origin/claude/agentic-coding-discipline…
PhysShell Jul 8, 2026
5820d8f
Merge remote-tracking branch 'origin/claude/blns-testing-proposal-by6…
PhysShell Jul 8, 2026
ac909ee
Merge remote-tracking branch 'origin/claude/own-net-positioning-7mmqb…
PhysShell Jul 8, 2026
3db3057
Merge remote-tracking branch 'origin/claude/own-types-documentation-1…
PhysShell Jul 8, 2026
1370a4c
Merge remote-tracking branch 'origin/PhysShell-patch-1' into claude/p…
PhysShell Jul 8, 2026
7b3de9b
Merge remote-tracking branch 'origin/PhysShell-patch-2' into claude/p…
PhysShell Jul 8, 2026
3ac1a23
docs(proposals): resolve P-026/P-027 numbering collisions from parall…
PhysShell Jul 8, 2026
ce9eab9
docs: reconcile P-026 strictness dimensions with its example report; …
PhysShell Jul 8, 2026
a5c0c97
docs: apply validation corrections across consolidated proposals
PhysShell Jul 8, 2026
b114ec5
docs(P-030): escape BLNS payloads for Own string syntax in the sketch
PhysShell Jul 8, 2026
fad5248
docs: address CodeRabbit review on consolidated PR
PhysShell Jul 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ ownership/lifetime/effects, (4) an MVP needs no PhD in Roslyn.
|------|---------|----------|
| **P0** | WPF/event/timer/subscription leaks; `IDisposable` ownership (leaks, fields, use-after-dispose); DI lifetime mismatch (captive dependency) | [P-004](proposals/P-004-wpf-lifetime-profile.md), [P-005](proposals/P-005-idisposable-ownership.md), [P-006](proposals/P-006-di-lifetimes.md) |
| **P1** | ArrayPool/Span ownership-view bugs; hidden effects / architecture rules | [P-007](proposals/P-007-arraypool-span.md), [P-008](proposals/P-008-effects-and-resources.md) |
| **P2** | async resource lifecycle / WPF async audit; `ValueTask` affine usage; typestate/protocols | [P-021](proposals/P-021-async-audit-pack.md), [P-008](proposals/P-008-effects-and-resources.md), [P-010](proposals/P-010-type-disciplines.md) |
| **P2** | async resource lifecycle / WPF async audit; `ValueTask` affine usage; typestate/protocols; resource state-machine soup + stale async writes | [P-021](proposals/P-021-async-audit-pack.md), [P-008](proposals/P-008-effects-and-resources.md), [P-010](proposals/P-010-type-disciplines.md), [P-027](proposals/P-027-resource-state-machine.md) |
| **P3** | LOH fragmentation; static-collection memory bloat; cross-thread `ObjectDisposedException` | — (runtime-bound; see detectability matrix) |

> **Are we showable yet?** The concrete "delicious .NET alpha" gate — the A–G bar
Expand Down Expand Up @@ -326,3 +326,11 @@ own scan. Label them as estimates wherever they appear.
| [P-020](proposals/P-020-ownts-react-effects.md) | OwnTS React effects profile (`Own.React`) — effect-storm angle | horizon | draft |
| [P-021](proposals/P-021-async-audit-pack.md) | Async audit pack (`Own.Async`) — safety-first WPF/application async lifecycle diagnostics | P2 | draft |
| [P-025](proposals/P-025-obligation-protocols.md) | Obligation protocols (`Own.Protocols`) — barrier-sensitive project invariants (OBL001–005) | P1 | first slice built (core + bridge + fixtures; extractor pending) |
| [P-026](proposals/P-026-csharp-strictness-retrofit.md) | C# strictness retrofit profile (`own audit strictness`) — witness/score over existing findings | P2 | draft (framing) |
| [P-027](proposals/P-027-resource-state-machine.md) | Resource state machines & stale-async-write detection (extends `Own.Async`) | P2 | draft |
| [P-028](proposals/P-028-unneeded-dependency-profile.md) | Unneeded-dependency profile (`Own.Lean`) — evidence-only "you don't need this abstraction" findings (YDN001–002) | P2 | draft |
| [P-029](proposals/P-029-agent-memory-layer.md) | Agent memory & policy layer (`.agents/`) — reviewed destination for AGENTS.md and learned-rule promotions | enabling | draft |
| [P-030](proposals/P-030-naughty-strings-testing.md) | Naughty-strings robustness pack (BLNS crash-testing of lexer/parser/serializers/CLI) | enabling | draft |
| [P-031](proposals/P-031-resource-model-files.md) | Project resource model files (`own.models.yaml`) — declarative acquire/release/capture | P2 | draft |
| [P-032](proposals/P-032-own-arch-facts.md) | Own.Arch facts & intent model — deterministic architecture-fact core (deepens P-023) | P2 | draft |
| [P-033](proposals/P-033-probabilistic-data-structures.md) | In-process sketches & bitmap indexes for audited legacy apps | horizon | draft |
1,107 changes: 1,107 additions & 0 deletions docs/agentic-coding-discipline-proposal.md

Large diffs are not rendered by default.

66 changes: 64 additions & 2 deletions docs/notes/agent-capability-layer.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ syscall/reachable-binary level. Two different enforcement models — don't confl
| Phase | What | Verdict |
|---|---|---|
| **1. Policy engine** | `owen-policy`: parse `owen.policy.toml`, `policy check/explain`, `gen-ignore` | **Do.** Daily use, zero risk, not built. 80% of daily value. |
| **2. Runner enforcement** | wrap agent in worktree + Sandboy | **Built** (`sandboy/`). Wire to a real gate step. |
| **2. Runner enforcement** | wrap agent in worktree + Sandboy | **Spiked** (`sandboy/` — authored, not yet compiled; acceptance gate: `cargo build --release` + `tests/demo.sh`, see `sandboy/README.md`). Wire to a real gate step. |
| **3. WIT tool components** | move tools to capability-scoped components | **Selective.** WIT only where input/author is untrusted: `secret-scanner`, `patch-analyzer`, `verifier-adapter` (parse untrusted output) — yes. `memory-search` over **your own** data — plain code, WIT buys nothing. |
| **4. MCP/WIT bridge** | `owen-mcp` tools backed by policy + components | Thin, later. |

Expand All @@ -139,7 +139,7 @@ syscall/reachable-binary level. Two different enforcement models — don't confl
canonical policy owen.policy.toml (Phase 1 — build)
context hygiene generated ignore + filtered packs (hygiene, NOT security)
tool isolation WIT + Wasmtime (own-adapter-host+) (Phase 3 — selective)
native isolation worktree + Sandboy (built: sandboy/)
native isolation worktree + Sandboy (spiked: sandboy/)
agent integration mode (B): agent-with-shell in the (Sandboy is the cage,
Sandboy cage, Owen tools on top WIT tools are contracts)
memory / verifier only through policy-mediated ifaces
Expand All @@ -161,3 +161,65 @@ generated output of one policy engine, not your architecture.
3. **Policy ⇄ Sandboy overlap** — how much of `[exec]`/`[network]` should be
*compiled down* into a Sandboy policy (real enforcement) vs stay advisory
context? Ideally `owen policy` emits a `sandboy` policy for mode (B).

---

## 8. Addendum (2026-07-05): authoring language for `owen.policy` — CUE, not TOML

§3 sketched `owen.policy.toml` as a single flat file. That's fine while there is
one profile. It stops being fine the moment there is more than one — `no-net`,
`worktree-only`, a `windows`-tagged exec profile, a `trusted-repo` vs
`untrusted-repo` split — because those need to **compose** ("inherit the base,
add these steps"), and TOML has no merge semantics of its own. Composing TOML by
hand means copy-pasting the base into every profile, and a copy that forgets
`network.default = "deny"` is precisely the failure mode this whole layer exists
to prevent — a config bug that reads as a permission grant.

**Decision: author `owen.policy` in [CUE](https://cuelang.org).** The reason to
prefer it over "TOML + a templating layer" is CUE's *unification* model: a
parent and a child don't override each other, they unify, and unification is a
**compile error** if they disagree. A leaf profile that tries
`network: "allow"` against a base that says `network: "deny"` doesn't silently
win — it fails to build. That is a materially different guarantee than
inheritance-with-override (Terragrunt-style merge, Jsonnet `+`), where the leaf
always wins and a mistaken override ships silently.

```text
policies/
no-net.cue # network: "deny" — the floor, never overridden
worktree-only.cue # repo.read/write confined to the worktree
default-processes.cue # exec allowlist
gates/
own-net.cue # unifies the policies above + step list
own-net.windows.cue # must *explicitly* switch to a different process
# profile to add e.g. `powershell` — can't inherit a
# denylist that silently forgot it
```

Compiled down to flat artifacts for whatever actually enforces it at runtime —
rendered TOML for the per-step Sandboy policy (`cue export --out toml`, see
`sandboy/README.md`), flat JSON for the gate manifest / `owen policy check`
consumer — the authoring layer is for
humans; the enforcement point should stay a boring, strict parser with no CUE
evaluation at run time.

Runner-up: **Nickel** (`import` + record merge via `&`, typed contracts) — a
reasonable second choice if the policy ever wants functions or generated
defaults; picked CUE first specifically because a security floor benefits more
from "conflicts are hard errors" than from programmability.

**Rejected for this use** (fine tools, wrong fit for a security source of
truth): **Jsonnet** (`+`/`super` composition is generative — right for stamping
out many manifests, wrong posture for policy, and a silent-override bug is just
as easy as in TOML with fancier syntax); **Dhall** (safe and total, but more
ergonomic weight than this scale needs — CUE gets the same "disagreement is an
error" property more cheaply); **HCL/Terragrunt** (`include` + `merge_strategy`
gives structural inheritance, but drags in Terraform's whole tooling/mental
model for a project that has nothing to do with infrastructure deployment).

**This does not change §0/§1.** WIT/Wasmtime stays the *execution* boundary for
tool components that parse untrusted input (already spiked as `audit/adapters`,
per `sandboy-isolation-adr.md` §6's update) — it is not a candidate for policy
*authoring*. The two axes stay separate: CUE composes the data, WIT/Sandboy
enforce it. See `007/docs/zero-trust-framework.md` for how 007 concretely
consumes a CUE-authored policy as `.007/gate.lock.json`.
Loading
Loading