Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
330 changes: 311 additions & 19 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ scripts/own-check.sh --format human -- /path/to/your/csharp/repo
```

Needs Python 3.11+ and the .NET SDK on `PATH` — nothing to build, nothing to
`pip install`. A packaged single-command CLI (`ownsharp check`) also exists —
build-and-install-locally today, not yet published to nuget.org; see
`pip install`. A packaged single-command CLI (`owen check`, package
`Owen.Cli`) also exists — build-and-install-locally today, not yet published
to nuget.org; see
[`frontend/roslyn/OwnSharp.Cli/README.md`](frontend/roslyn/OwnSharp.Cli/README.md)
and [`docs/notes/alpha-readiness.md`](docs/notes/alpha-readiness.md) gate **A**.

Expand Down Expand Up @@ -921,7 +922,7 @@ ownlang/
test_ownir.py # the OwnIR bridge: C# facts -> core -> OWN001 at the C# site
frontend/roslyn/ # the C# extractor (Roslyn, CI-only) + .cs samples (P-001)
OwnSharp.Extractor/ # ownsharp-extract (dotnet tool): facts only
OwnSharp.Cli/ # ownsharp (dotnet tool, gate A): extractor + vendored core, one install
OwnSharp.Cli/ # owen / Owen.Cli (dotnet tool, gate A): extractor + vendored core, one install
rust/ # the Rust core migration (P-022): own-ir + own-syntax so far,
# oracle-gated against this Python core — see rust/README.md
pyproject.toml # gate: ruff + mypy --strict (see below)
Expand Down
5 changes: 3 additions & 2 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ scripts/own-check.sh --format human -- /путь/к/вашему/csharp/репо
```

Нужны Python 3.11+ и .NET SDK в `PATH` — ничего собирать, ничего ставить через
`pip install`. Есть и упакованный однокомандный CLI (`ownsharp check`) — сегодня
собирается и ставится локально, в nuget.org ещё не опубликован; см.
`pip install`. Есть и упакованный однокомандный CLI (`owen check`, пакет
`Owen.Cli`) — сегодня собирается и ставится локально, в nuget.org ещё не
опубликован; см.
[`frontend/roslyn/OwnSharp.Cli/README.md`](frontend/roslyn/OwnSharp.Cli/README.md)
и [`docs/notes/alpha-readiness.md`](docs/notes/alpha-readiness.md), gate **A**.

Expand Down
18 changes: 9 additions & 9 deletions action.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: "Own.NET resource-leak check"
name: "Owen lifetime/resource check"
description: >-
Scan C# for lifetime/resource leaks the compiler cannot express — event/timer
subscription leaks, undisposed IDisposable fields/locals, ignored Subscribe()
Expand Down Expand Up @@ -29,7 +29,7 @@ inputs:
required: false
default: "true"
python-version:
description: "Python version for the Own.NET core."
description: "Python version for the Owen core."
required: false
default: "3.13"
dotnet-version:
Expand All @@ -39,7 +39,7 @@ inputs:
sarif-file:
description: >-
Where to write the SARIF log when format: sarif (default:
$RUNNER_TEMP/own-net.sarif). The chosen path is echoed back as the
$RUNNER_TEMP/owen.sarif). The chosen path is echoed back as the
sarif-file output regardless.
required: false
default: ""
Expand All @@ -54,7 +54,7 @@ outputs:
runs:
using: "composite"
steps:
- name: Set up Python (Own.NET core)
- name: Set up Python (Owen core)
uses: actions/setup-python@v5
with:
python-version: ${{ inputs.python-version }}
Expand All @@ -64,7 +64,7 @@ runs:
with:
dotnet-version: ${{ inputs.dotnet-version }}

- name: Own.NET leak check
- name: Owen leak check
id: own
shell: bash
env:
Expand All @@ -88,16 +88,16 @@ runs:
# passed so the true exit code (0 clean / 1 findings / >=2 hard error) is
# captured *after* the file is written; whether a finding fails the step
# is the action's own fail-on-finding (default: let code scanning gate).
sarif="${OWN_SARIF_FILE:-$RUNNER_TEMP/own-net.sarif}"
sarif="${OWN_SARIF_FILE:-$RUNNER_TEMP/owen.sarif}"
set +e
"$check" --root "${{ github.action_path }}" --format sarif \
--severity "$OWN_SEVERITY" --fail-on-finding -- "$OWN_PATH" > "$sarif"
rc=$?
set -e
echo "sarif-file=$sarif" >> "$GITHUB_OUTPUT"
echo "Own.NET wrote SARIF to $sarif ($(wc -c < "$sarif" 2>/dev/null || echo 0) bytes; own-check rc=$rc)"
echo "Owen wrote SARIF to $sarif ($(wc -c < "$sarif" 2>/dev/null || echo 0) bytes; own-check rc=$rc)"
if [ "$rc" -ge 2 ]; then
echo "::error::Own.NET hard error (bad facts / drifted contract)"
echo "::error::Owen hard error (bad facts / drifted contract)"
cat "$sarif" >&2 || true
exit "$rc"
fi
Expand All @@ -107,7 +107,7 @@ runs:
# fails the redirection (exit 1, outside own-check's 0/1/>=2 contract).
# Surface it; never let it pass as a gated-off finding with no SARIF.
if [ ! -s "$sarif" ]; then
echo "::error::Own.NET produced no SARIF at $sarif (own-check rc=$rc) — the run or its redirection failed"
echo "::error::Owen produced no SARIF at $sarif (own-check rc=$rc) — the run or its redirection failed"
exit 1
fi
if [ "$OWN_FAIL_ON_FINDING" = "true" ] && [ "$rc" -eq 1 ]; then
Expand Down
8 changes: 4 additions & 4 deletions docs/notes/alpha-readiness.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ The bar for "showable": a person can reproduce the wow in ~3 minutes

| | Item | Status (2026-06-27) | Gap to close |
|---|------|--------------------|--------------|
| **A** | `dotnet tool` one-command CLI | ◑ **mostly built** (issue #202) — `OwnSharp.Cli` wraps extractor+core into one `dotnet tool install` → `ownsharp check <path\|.sln>`, proven install→check→findings on a clean ubuntu/windows runner in CI (`ownsharp-cli-smoke`). See [`frontend/roslyn/OwnSharp.Cli/README.md`](../../frontend/roslyn/OwnSharp.Cli/README.md). | Not published to nuget.org yet — today it's build-and-install-from-source only. Publishing (+ a real version scheme beyond `0.1.0`) is the remaining step. |
| **A** | `dotnet tool` one-command CLI | ◑ **mostly built** (issue #202) — `OwnSharp.Cli` (public facade: package `Owen.Cli`, command `owen`) wraps extractor+core into one `dotnet tool install` → `owen check <path\|.sln>`, proven install→check→findings on a clean ubuntu/windows runner in CI (`ownsharp-cli-smoke`). See [`frontend/roslyn/OwnSharp.Cli/README.md`](../../frontend/roslyn/OwnSharp.Cli/README.md). | Not published to nuget.org yet — today it's build-and-install-from-source only. Publishing (+ a real version scheme beyond `0.1.0`) is the remaining step. |
| **B** | GitHub Action | ✅ **built** — `action.yml`: `path`/`severity`/`format` (`github` / `msbuild` / `human` / `sarif`), purple shield branding. Matches the "stupidly simple YAML" bar. | Publish to Marketplace; pin the 6-line usage in the README. |
| **C** | SARIF / PR annotations | ✅ **built** — SARIF 2.1.0 + GitHub annotations + reachability/evidence (P-015). | — |
| **D** | 5 core diagnostics | ✅ **built, well past** — OWN001/002/003, OWN014, DI001–005, POOL001–005, WPF001–005 (catalog). The comment's `SUB001/SUB002/TMR001/DISP001/DI001` all exist *semantically*; the `SUB/TMR/DISP` catalog rename is the deferred consolidation item, not new work. | (naming only) land the catalog rename with the OwnIR-v1/profile-label work. |
Expand All @@ -58,13 +58,13 @@ suppression → "why not Sonar/CodeQL"), every step of that path now exists.
front door, and now A have all closed too — what's left is publishing, not
building:**

1. ~~a single `ownsharp check MyApp.sln` tool (**A**)~~ — **built**, not yet published to nuget.org;
1. ~~a single `owen check MyApp.sln` tool (**A**)~~ — **built**, not yet published to nuget.org;
2. ~~a wedge landing README + copy-paste quickstart (front door)~~ — **done**;
3. ~~three packaged case studies from finds we already have (**F**)~~ — **done**;
4. ~~one consolidated suppression / false-positive page (**G**)~~ — **done**.

None of those is research; all are the difference between "interesting PoC" and
"people install it." Publishing `OwnSharp.Cli` to nuget.org is now the one item
"people install it." Publishing `Owen.Cli` to nuget.org is now the one item
standing between here and the day 1–30 milestone being *literally* copy-paste
for a stranger.

Expand All @@ -87,7 +87,7 @@ until the .NET alpha above is delicious. Do not let the spike exceed 20%.

## 90-day shape (sequencing, not a schedule)

- **Days 1–30 — make the .NET alpha tasty:** publish `OwnSharp.Cli` to
- **Days 1–30 — make the .NET alpha tasty:** publish `Owen.Cli` to
nuget.org (A/B/C/D/E/F/G and the README front door are all otherwise done).
Suppression UX + bad/ok corpus polish continue as bug-driven follow-ups, not
a blocking gate.
Expand Down
Loading
Loading