docs: consolidated documentation PRs (#178–#189) — validated & corrected - #190
Conversation
…ctness) A framing/packaging proposal, not a new engine: front the existing fleet's findings (lifetime/resource, typestate/obligations, config drift) under one strictness narrative + a single score aimed at the F#/Rust-refugee audience. Accepts the strictness-audit framing and keeps ownership/lifetime as the moat; explicitly rejects an Option/Result migration linter and a generic nullable nag as the SAST fight the charter refuses. Records the honest gap: a whole-solution score depends on the not-yet-general Roslyn extractor (P-001/P-014), so the first cut runs over the audit target or labels dimensions NO-TOOL rather than faking a clean pass. Adds the P-026 index row. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YNzzRHgdDbue9LhWyLTui3
…te detection Distills a React-useEffect critique into the two ideas that generalize past React: modeling a resource's lifecycle as one explicit state instead of boolean/nullable soup, and detecting stale async writes where a value read before an await gates a write committed after it. Cross-references what P-004/P-005/P-020/P-021 already cover so this only adds the two genuinely new diagnostics (ASYNC050-052) rather than duplicating cleanup/blocking-wait/async-void checks. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5JLaXfYrZYrt4JG1fYJFA
…thod hazards CodeRabbit review on #179: the sketch mixed a type-scoped fact (sibling status fields) into the per-method async_methods entries. Give it its own types[] fact block so the extractor contract for ASYNC050 (type-level) stays separate from ASYNC051/052 (per-method). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5JLaXfYrZYrt4JG1fYJFA
Evidence-only "you don't need this abstraction" checks, inspired by the you-dont-need/You-Dont-Need meta-list but scoped away from opinion: each finding names a call site with zero customization evidence (a trivial AutoMapper 1:1 profile, a MediatR handler with one impl and no pipeline behaviours) rather than judging a library's presence. Report-only, never a build gate; bounded against P-021 (async elision already owned by ASYNC040) and P-023 (Own.Arch gates forbidden structure, this flags redundant structure). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NNLSE5z4V92RwdHHF1mW45
… reuse Codex review on #180 caught it: the extractor's DiTypeName collapses IRequestHandler<Foo,Bar> to the bare IRequestHandler identifier, so the existing P-006 services[] graph can't distinguish per-request-type implementation counts once a project has more than one MediatR handler. Correct the MVP scope and sketch to require a small additive extractor change that preserves closed generic arguments for MediatR marker interfaces, instead of claiming YDN002 rides the graph as-is. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NNLSE5z4V92RwdHHF1mW45
Defines the reviewed, structured destination for AGENTS.md content and learned-rule promotions: split AGENTS.md into an index over .agents/*.md satellite files, adopt .007/gate.toml as the machine-readable gate manifest, and fix a promotion contract (provenance + normal PR review, no auto-write). Companion to the reflect/learning-engine design proposed in the sibling private repo 007 (docs/reflect.md there), which is one possible source of promotions into this layer. Claude-Session: https://claude.ai/code/session_01RpcmoaVnkTzWmzEJjN3Hrq
Appends §8 to the Owen Gate design note: TOML's lack of merge semantics makes multi-profile policy (no-net / worktree-only / windows exec) copy-paste-prone, where a forgotten override silently reopens a denied capability. CUE's unification model turns a conflicting override into a compile error instead. Records Nickel as runner-up and Jsonnet/Dhall/HCL as considered-and-rejected, and reaffirms WIT/Wasmtime stays the untrusted-input plugin boundary, not a policy-authoring surface — cross-referenced from 007's zero-trust-framework.md.
sandboy/README.md's policy.example.toml is the plain, boring artifact Sandboy actually reads; adds a pointer to where the composable CUE source and the cue export --out toml render step are documented (007's zero-trust-framework.md), so the two stay clearly separated instead of drifting apart in two repos.
…n contract The "Wiring into 007" section already describes the per-step wrap; point it at 007/docs/loop-canvas.md, where the same slot is framed as the canvas Actions/Limits/Observability fields. Docs only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VNgUjrvwqwtXqe8URbJaQN
Codex review (PR #183): the wiring note described `sandboy --report <json>` as if available, but `parse_args` accepts only `run`/`--policy`/`--` and rejects any other flag (exit 2). Mark both integration hooks (`--report` on sandboy, `sandbox_policy` on 007's GateStep) explicitly as Floor-1 work that does not exist yet, and note the current stderr enforcement status. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VNgUjrvwqwtXqe8URbJaQN
Keep the two sides of the contract consistent: the 007-side bullet framed `sandbox_policy` as plain "forward-compatible", but 007/docs/loop-canvas.md now requires it to fail closed (schema bump) since silent unknown-field tolerance fails open on a security control. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VNgUjrvwqwtXqe8URbJaQN
Reorganize the type-disciplines proposal under semantic primitives, algebraic domain modeling, state/lifetime discipline, tooling, and future — adding discriminated unions/exhaustive matching/Option/Result (previously undocumented anywhere in the repo), strongly typed IDs, ValueTask/single-use constraints, and an elaborated tooling section (source generators, code fixes, generated docs, OwnIR facts). Existing typestate/ownership items are cross-referenced to P-004/005/006/007 instead of duplicated, and a diagnostic-prefix open question (`TYP0xx` vs `[type: …]` tag) is recorded against the DI/EFF/OBL precedent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019ChcHzqtYRaVGiHmL2dCQ8
Propose using the Big List of Naughty Strings (BLNS) as a pinned fixture corpus to crash-test the extractor/lexer/parser, the JSON/SARIF emitters, and the CLI against adversarial input text — motivated by the cp1251 console crash OwnAudit already hit once.
Externalizes the compiled-in resource-kind table (ownlang/ownir.py _prelude_resources) into a declarative, symbol-resolved project config so a codebase can teach the extractor its own acquire/release conventions (e.g. ConnectionFactory.Open()/Connection.Close()) without a new hardcoded classifier in Program.cs. Grounded against P-014's semantic-resolution discipline and P-015/P-024's precedents so it stays a fact producer, not a second detection DSL.
CodeRabbit: the row only named extractor/serializers/CLI but the proposal also covers lexer/parser and config discovery.
CodeRabbit: Layer 1 named its acceptable failure shapes but Layer 3 (CLI/path/future config) didn't. Name the I/O exceptions that count as an honest rejection, mirroring cmd_explain's existing OSError catch, and flag that ownlang/__main__.py's _read() catches nothing today — so a bad path is a live candidate for the very first red case, not a hypothetical.
…ew ones Codex review on #186 caught it: the resource discriminator and its [resource: ...] tag are a closed, fixed-mapping vocabulary (ownlang/ownir.py::_KNOWN_RESOURCE_KINDS/_RESOURCES, pinned by spec/ownir.schema.json) that load() rejects unknown values for. v0 now explicitly binds project model entries to an existing discriminator instead of claiming a free-text kind/tag, with the precision loss and the scoped-out follow-up (an additive display_kind field) called out as Open Question 6.
…t-5qsy3m' into claude/pr-docs-review-validation-1wat02
…-yivuv3' into claude/pr-docs-review-validation-1wat02 # Conflicts: # docs/proposals/README.md
…7vs9' into claude/pr-docs-review-validation-1wat02 # Conflicts: # docs/ROADMAP.md # docs/proposals/README.md
…p68' into claude/pr-docs-review-validation-1wat02 # Conflicts: # docs/proposals/README.md
…b0vgrw' into claude/pr-docs-review-validation-1wat02
…ugo5y' into claude/pr-docs-review-validation-1wat02
…-oe7qd7' into claude/pr-docs-review-validation-1wat02
…0j6' into claude/pr-docs-review-validation-1wat02 # Conflicts: # docs/proposals/README.md
…f' into claude/pr-docs-review-validation-1wat02 # Conflicts: # docs/proposals/README.md
…x4iut' into claude/pr-docs-review-validation-1wat02
…r-docs-review-validation-1wat02
…r-docs-review-validation-1wat02
…el PRs Seven proposals landed in parallel branches all claiming P-026 (and one P-027). Renumber by PR creation order, keeping P-026 for the earliest: - P-026 csharp-strictness-retrofit (unchanged, PR #178) - P-027 resource-state-machine (PR #179) - P-028 unneeded-dependency-profile (PR #180) - P-029 agent-memory-layer (PR #181) - P-030 naughty-strings-testing (PR #185) - P-031 resource-model-files (PR #186) - P-032 own-arch-facts (PR #188) - P-033 probabilistic-data-structures (PR #189) Update headings, proposals/README.md index rows (adding missing P-032/P-033 rows), and ROADMAP.md links. Normalize the two chat-pasted proposals (P-032, P-033) to the standard proposal header and replace live-PR URLs with in-repo links.
…align §8 tree comments
Multi-pass review of the consolidated docs (per-file validation against the code plus cross-repo consistency checks). Highlights: - P-010: spec/Diagnostics.md is derived; ownlang/diagnostics.py TITLES is the source of truth for OWN codes — inverted claim fixed - P-026: add the missing local-immutability dimension so the illustrative report's 4/6 coverage matches the dimensions table - P-027: drop 'existing' for P-021's planned async_methods module; repoint a wrong P-021 open-question citation; attribute the plain-structs lowering rule to P-010 only - P-029: fix broken 007 companion reference (docs/reflect.md -> docs/agent-memory-layer.md), align 'reflect' vocabulary with the landed design, refresh stale proposal counts - P-030: replace the pytest-based sketch with a stdlib runner matching the zero-dependency suite; make the synthesized OwnLang wrapper actually parse per ownlang/parser.py grammar - P-032/P-033: fence all code blocks, promote plain-text section titles to headings, backtick quoted identifiers; P-033 reframed to target the audited legacy app, not the analyzer (source: own.diagnostics.sketches) - agentic-coding-discipline: soften 'o7 run works' to match 007 TODO.md (scaffolded, not yet exercised); add part-2 divider heading - agent-capability-layer §8: Sandboy consumes rendered TOML (not JSON); sandboy status corrected Built -> Spiked (authored, not compiled) - sandboy/README: replace live 007 blob URL with plain cross-repo path; gate steps described as bare bash (bypassPermissions applies to the agent phase) - ROADMAP: index rows for all new proposals P-026..P-033
|
Warning Review limit reached
Next review available in: 47 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
📝 WalkthroughWalkthroughThis PR adds eight new design proposal documents (P-026 through P-033), updates ROADMAP.md and proposals/README.md indexes, substantially revises the P-010 type-disciplines proposal, updates docs/notes/agent-capability-layer.md status and adds a CUE policy addendum, adds a new agentic-coding-discipline proposal document, and updates sandboy/README.md. ChangesDocumentation and Proposal Updates
Estimated code review effort: 2 (Simple) | ~15 minutes 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a5c0c97ab1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # resource emit_*/kind members (a `let` rhs never takes a string), | ||
| # so a benign entry parses cleanly and only the naughty content is | ||
| # under test — the wrapper follows the run_tests.py PRELUDE shape. | ||
| src = f'module M\nresource R {{ acquire a release r emit_type "{naughty}" }}\n' |
There was a problem hiding this comment.
Escape BLNS entries before embedding them
For BLNS entries that contain " or Own escape sequences, this f-string injects the payload directly inside the surrounding Own string literal. Those cases either become LexError/ParseError that the sketch treats as a passing “honest rejection,” or they are decoded into different text before reaching the parser/serializer, so many of the corpus strings this robustness pack is meant to exercise would be silently skipped or mutated. Escape the payload for Own string syntax before embedding it, or construct the test input without reparsing a raw string literal.
Useful? React with 👍 / 👎.
Codex review on the consolidated PR: entries containing quotes or backslashes injected raw into the f-string would terminate the Own string literal early (counted as an 'honest rejection') or be decoded into different text, silently skipping exactly the corpus rows the pack is meant to exercise. Escape \\ and " before embedding, and note the complementary raw-lexer path that still exercises the unescaped entries.
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (1)
docs/proposals/P-033-probabilistic-data-structures.md (1)
76-84: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winSpecify whether the bitmap ops mutate or return new indexes.
And/Or/Exceptare ambiguous here. If they mutate, the names should say so; if they return new indexes, the proposal should say that explicitly. Right now the ownership and aliasing semantics are unclear.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/proposals/P-033-probabilistic-data-structures.md` around lines 76 - 84, Clarify the ownership semantics of IBitmapIndex operations by stating explicitly in the proposal whether And, Or, and Except mutate the current bitmap or return a new index. Update the interface documentation around IBitmapIndex and its methods so the behavior is unambiguous, and if these methods are intended to be non-mutating, say that they produce new indexes rather than modifying the receiver.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/agentic-coding-discipline-proposal.md`:
- Around line 59-76: The fenced example blocks in the proposal are missing
language tags, which causes markdownlint MD040 and makes the samples harder to
read. Update the fenced code blocks in this document to include an appropriate
language hint, and keep the surrounding content unchanged; use the existing
example sections as the target locations.
In `@docs/notes/agent-capability-layer.md`:
- Line 115: The acceptance gate text is inconsistent with the documented build
mode for Sandboy validation. Update the “Runner enforcement” note to match the
build command used in sandboy/README.md, or explicitly call out that this phase
intentionally uses a debug build; keep the wording consistent in the note that
references the gate step and the Sandboy validation path.
In `@docs/proposals/P-010-type-disciplines.md`:
- Around line 77-80: Narrow the lowering claim in this paragraph so it does not
promise the same implementation for all pillars. Update the wording around the
affected sentence to separate brands/refinements/units from unions and
protocols, using the unique concepts in this proposal section to reflect that
unions are modeled as closed hierarchies/closed struct unions and protocols as
consume-on-transition typestate rules, rather than all being “plain
structs/records plus smart constructors.” Keep the
analyzer-versus-second-type-checker point, but make the lowering description
match the later sections’ distinct models.
In `@docs/proposals/P-026-csharp-strictness-retrofit.md`:
- Around line 75-93: The strictness score section needs an explicit
one-bucket-per-finding rule so the same finding cannot be counted across
multiple dimensions. Update the strictness model description around the weighted
sum and dimensions table to define a primary-dimension or precedence rule for
each finding, and state how reclassification should move a finding between
buckets without changing the total inconsistently. Keep the guidance aligned
with the existing “strictness score” and “dimensions” wording so the overlap
behavior is unambiguous.
In `@docs/proposals/P-032-own-arch-facts.md`:
- Around line 104-106: The architecture intent-model contract is split between
JSON and YAML, so align the proposals to a single canonical source of truth.
Update the wording in P-032’s “Architecture intent model” section and the P-023
reference to consistently name either architecture.intent.json or
architecture.rules.yaml, and clarify whether any other format is only a
generated export. Use the proposal sections that define the intent model and
hand-written source of truth to keep the contract unambiguous.
---
Nitpick comments:
In `@docs/proposals/P-033-probabilistic-data-structures.md`:
- Around line 76-84: Clarify the ownership semantics of IBitmapIndex operations
by stating explicitly in the proposal whether And, Or, and Except mutate the
current bitmap or return a new index. Update the interface documentation around
IBitmapIndex and its methods so the behavior is unambiguous, and if these
methods are intended to be non-mutating, say that they produce new indexes
rather than modifying the receiver.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 86ae7605-4616-40a4-a12b-bab41e97a037
📒 Files selected for processing (14)
docs/ROADMAP.mddocs/agentic-coding-discipline-proposal.mddocs/notes/agent-capability-layer.mddocs/proposals/P-010-type-disciplines.mddocs/proposals/P-026-csharp-strictness-retrofit.mddocs/proposals/P-027-resource-state-machine.mddocs/proposals/P-028-unneeded-dependency-profile.mddocs/proposals/P-029-agent-memory-layer.mddocs/proposals/P-030-naughty-strings-testing.mddocs/proposals/P-031-resource-model-files.mddocs/proposals/P-032-own-arch-facts.mddocs/proposals/P-033-probabilistic-data-structures.mddocs/proposals/README.mdsandboy/README.md
- P-010: narrow the lowering claim — brands/refinements/units lower to plain structs + smart constructors; unions to a sealed hierarchy / closed struct union; protocols to consume-on-transition typestate rules - P-026: define the one-bucket-per-finding precedence rule so the strictness score cannot double-count a defect across dimensions - P-032: reconcile the intent-model contract with P-023 — one canonical machine contract (architecture.intent.json), P-023's rules.yaml as the authoring layer that renders to it - P-033: state that IBitmapIndex And/Or/Except are non-mutating and return new indexes - agent-capability-layer: acceptance gate build mode aligned with sandboy/README.md (cargo build --release) - agentic-coding-discipline: language tags on all 61 bare fences (MD040)
…strictness-retrofit in the just-merged consolidation PR #190)
Own.NET's main gained a consolidation PR (#190) between when this branch was cut and now, which resolved seven proposals fighting over P-026 by renumbering to P-026..P-033. This one lands after that as P-034 to avoid re-colliding. Confirmed no overlap with the newly landed P-025/P-026/P-027 (obligation protocols, strictness retrofit, resource state machines) — all three are static/analysis-time; this proposal is the runtime/dynamic half none of them cover.
…d P-034 Re-syncs with main after consolidation PR #190 (which renumbered seven colliding P-026 candidates to P-026..P-033) and appends P-034 (runtime lifetime guard) at the end instead of re-colliding.
This branch forked before consolidation PR #190 merged. It was referencing P-026..P-033 in its README index without those files actually existing in its tree (dead links, flagged by review). Copying main's content verbatim so the branch is self-consistent standalone.
Pins down a design discussion that asked whether the C/C++ "harden malloc/free" idea has a .NET analog. Maps the discussion's rule catalog onto what own-check/OwnLang already ships (OWN001-003/014, WPF001-005, DI001-005, POOL001-003, OwnAudit phase 5) so it isn't re-derived, records the already-decided non-goals (SafeHandle/Marshal balance proofs), and scopes the one genuinely new piece: a small opt-in runtime disposal guard + test-time quarantine that covers what static analysis structurally can't (D5 ownership transfer, cross-thread disposal races). Also cross-links the newly landed P-025/P-027 (static obligation/state-machine checks) as related-but-different mechanisms. Rebuilt on current main (branch claude/dotnet-lifetime-analyzer-hzor1x hit an unresolvable merge conflict: its README.md edit and main's consolidation PR #190 both inserted table rows at the same anchor point relative to their common ancestor — a pure git 3-way-merge hunk-adjacency collision, not a content disagreement).
Что и зачем
Консолидирует все 12 открытых документационных PR (#178, #179, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189) в один, с валидацией и корректировками. Семь PR одновременно претендовали на номер P-026 (и один на P-027) — перенумеровано в P-026…P-033 по дате создания PR, индексы
docs/proposals/README.mdиdocs/ROADMAP.mdобновлены. Каждый документ проверен против кода и соседних репозиториев (007, OwnAudit); найденные фактические ошибки исправлены.Ключевые корректировки сверх простого слияния:
ownlang/diagnostics.py(TITLES), а неspec/Diagnostics.md(утверждение было инвертировано);007/docs/reflect.md→007/docs/agent-memory-layer.md; словарь «reflect» приведён к фактически лёгшему дизайну;ownlang/parser.py;sandboy/README.mdи 007 zero-trust §9;agentic-coding-discipline-proposal.md(по 1103 строки в каждом репо) сведены к канонику здесь, в OwnAudit/007 — указатели;../../own.net/...).Замечание: на main существует старая коллизия P-015 (
P-015-configuration-surface.mdиP-015-reachability-evidence.md) — здесь не трогалась, стоит разрулить отдельным PR.Парные консолидированные PR: OwnAudit и 007 (те же ветки
claude/pr-docs-review-validation-1wat02); ссылка 007 →docs/agent-run-triage.mdв OwnAudit оживёт после мержа парного PR.Тип изменения
Как проверено
python tests/run_tests.pyruff check .иmypypython scripts/<...>.py --selftest)Docs-only. Прогнан механический верификатор по всем изменённым файлам: относительные markdown-ссылки резолвятся, код-фенсы сбалансированы, конфликт-маркеров нет; каждый документ прошёл содержательную валидацию против кода (multi-agent review, ~90 применённых правок).
Связанные issue
Нет. Заменяет PR #178–#189 (закрыты с указателем сюда).
Чеклист
feat:,fix:,docs:…)🤖 Generated with Claude Code
https://claude.ai/code/session_016tY7jvPGyDWmWYjrRHWPnM
Generated by Claude Code
Summary by CodeRabbit
New Features
Documentation