Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
925 commits
Select commit Hold shift + click to select a range
af721ee
desloppify: unify triage policy and error contracts
peteromallet Mar 12, 2026
de2ef56
desloppify: streamline holistic review prep
peteromallet Mar 12, 2026
22940e1
desloppify: finish migration seam cleanup
peteromallet Mar 12, 2026
0edec8c
desloppify: reset language runtime state coherently
peteromallet Mar 12, 2026
a9fb6de
desloppify: clarify coverage mapping and predicates
peteromallet Mar 12, 2026
faf00cb
desloppify: simplify triage validation seams
peteromallet Mar 12, 2026
d91b880
desloppify: preserve review queue and observe evidence
peteromallet Mar 12, 2026
2af9521
desloppify: clarify compatibility naming seams
peteromallet Mar 12, 2026
4cbf13b
desloppify: reorganize framework and holistic package seams
peteromallet Mar 12, 2026
6c76622
desloppify: narrow public language framework surface
peteromallet Mar 12, 2026
2628a85
desloppify: simplify stale smell workflow seams
peteromallet Mar 12, 2026
287fbdf
desloppify: streamline reporting and planning helpers
peteromallet Mar 12, 2026
6c9bd82
desloppify: strengthen review coverage seams
peteromallet Mar 12, 2026
b588916
desloppify: tighten review and queue type contracts
peteromallet Mar 12, 2026
f9570d8
fix: skip Go generated files and improve import-run error messages
peteromallet Mar 12, 2026
3e19111
fix: restore language registry after reset test to prevent pollution
peteromallet Mar 12, 2026
ce1ec6b
fix: delete 23 compat wrapper files and remove SimpleNamespace antipa…
peteromallet Mar 12, 2026
84e38a6
desloppify: remove scan workflow lazy reconcile import
peteromallet Mar 12, 2026
e2d69cb
desloppify: retire triage facade hot path
peteromallet Mar 12, 2026
1b09dfe
desloppify: surface suggestion/evidence in show and cluster commands
peteromallet Mar 12, 2026
b93f8ac
desloppify: split organize validation and batch context normalization
peteromallet Mar 12, 2026
a7667c2
feat: normalize C++ security tool findings
Dragoy Mar 12, 2026
e181be6
desloppify: unify issue lifecycle status and surface history to revie…
peteromallet Mar 12, 2026
6741c33
fix: harden C++ security normalization fallback and deduplication
Dragoy Mar 12, 2026
a610907
fix: repair C++ coverage logic regex
Dragoy Mar 12, 2026
e17d683
fix: harden C++ tool-backed security scanning
Dragoy Mar 12, 2026
4b69426
desloppify: two-phase observe/judge review scoring with evolving char…
peteromallet Mar 12, 2026
82c8781
fix: batch cppcheck issue scanning for C++
Dragoy Mar 12, 2026
4621448
Fix scan export and scoring impact crash paths
imetandy Mar 12, 2026
6a5f1fc
fix: surface blind-review workflow in first anti-gaming penalty message
claude Mar 12, 2026
59589d3
fix: redact numeric target from penalty messages to prevent anchoring
claude Mar 12, 2026
52c32a0
fix: rust workspace rustdoc execution
MacHatter1 Mar 12, 2026
adf4c3c
docs: add C++ full-scan requirements
Dragoy Mar 12, 2026
34c29a1
fix: close Windows and C++ review blockers
Dragoy Mar 12, 2026
92468aa
chore: drop local C++ planning docs from PR
Dragoy Mar 12, 2026
1bb6ccd
code health: broad cleanup and triage/review improvements
peteromallet Mar 12, 2026
8cdd733
fix: address remaining C++ PR review issues
Dragoy Mar 12, 2026
7e5e704
chore: gitignore .claude/ and remove tracked lock file
peteromallet Mar 12, 2026
f8d1207
feat: add full C++ plugin support and harden tool-backed scanning
peteromallet Mar 12, 2026
0009200
fix: resolve lint, mypy, and stale test expectations
peteromallet Mar 12, 2026
e362226
fix: restore postflight scan marker after triage skip commands
peteromallet Mar 12, 2026
35ecee8
chore: bump version to 0.9.6
peteromallet Mar 12, 2026
3d9f74b
chore: bump version to 0.9.7 and add tweet-on-release workflow
peteromallet Mar 12, 2026
6329b68
chore: gate PyPI publish on main branch only
peteromallet Mar 12, 2026
0c02a70
chore: bump version to 0.9.8
peteromallet Mar 12, 2026
b3e979b
fix: restore push triggers on PyPI publish workflow
peteromallet Mar 12, 2026
553174c
desloppify: update triage and issue semantics
peteromallet Mar 13, 2026
f0b0012
chore: update local changes
peteromallet Mar 13, 2026
6bfca00
feat: queue ownership, cluster semantics, lifecycle phase improvements
peteromallet Mar 13, 2026
6bce1cc
feat: sequential reconciliation pipeline, execution status flags, pla…
peteromallet Mar 13, 2026
c08b84d
fix: unblock objective resolves while triage is pending
imetandy Mar 13, 2026
99a8228
feat: auto-resolve stale issues for deleted files, triage/queue/recon…
peteromallet Mar 13, 2026
a9cf466
feat: accept substantive work-product descriptions in triage attestat…
peteromallet Mar 13, 2026
9dd5a43
feat: reorganize cluster/override into subpackages, triage validation…
peteromallet Mar 13, 2026
e3c1310
chore: update scorecard image
peteromallet Mar 13, 2026
a5a0fdd
fix: update renamed test reference in Makefile and CI contract
peteromallet Mar 13, 2026
7fe01b4
fix: improve cxx detector scoping (PR #415)
peteromallet Mar 13, 2026
7ce7e28
docs: add .desloppify/ gitignore reminder to setup instructions
peteromallet Mar 13, 2026
355bc05
chore: bump version to 0.9.9, update scorecard
peteromallet Mar 13, 2026
47f2e0e
fix: stub requests module in tweet release tests
peteromallet Mar 13, 2026
97b0e6f
ci: retrigger checks after branch protection update
peteromallet Mar 13, 2026
9c233a4
Merge pull request #419 from peteromallet/0.9.9
peteromallet Mar 13, 2026
18b81c8
fix: simplify PyPI publish to trigger on push to main only
peteromallet Mar 13, 2026
d31ac76
chore: remove test_release_image.png and AGENTS.md from repo
peteromallet Mar 13, 2026
40f1f89
Add Rust inline-test filtering: ignore clippy diagnostics in cfg(test…
fluffypony Mar 16, 2026
9036c16
feat(r): improve tree-sitter R_SPEC function and import queries (#449)
sims1253 Mar 16, 2026
5401769
feat(ruby): improve plugin — excludes, detect markers, default_src, s…
klausagnoletti Mar 16, 2026
0a9449f
feat: add Factory Droid skill harness support (#451)
sims1253 Mar 16, 2026
7879c04
docs(python): add user-facing section to README (#459)
klausagnoletti Mar 16, 2026
eaf0a9c
feat(javascript): add plugin tests and documentation (#458)
klausagnoletti Mar 16, 2026
d0d97d8
0.9.10 (#463)
peteromallet Mar 16, 2026
5d96cac
chore: remove release notes file after publishing to GitHub Releases
peteromallet Mar 16, 2026
dafe8de
fix: stop re-injecting phantom issue IDs from action_step refs into c…
peteromallet Mar 18, 2026
fc97015
fix(update-skill): detect duplicate content when begin/end markers ar…
peteromallet Mar 18, 2026
2ce6718
feat(r): add R-specific code smell detectors
sims1253 Mar 14, 2026
0a36008
fix(r): address PR review comments for code smell detectors
sims1253 Mar 17, 2026
7062c09
refactor(r): use tree-sitter for library_in_function detection
sims1253 Mar 17, 2026
18b497a
fix: handle generic fixers that return entries without 'removed' key
peteromallet Mar 18, 2026
61bb7cb
fix: handle dataclass objects in json_default serializer
peteromallet Mar 18, 2026
1a0439e
fix: filter synthetic IDs from deferred skip counting
peteromallet Mar 18, 2026
ab36319
fix: prevent catastrophic backtracking in dart function extractor regex
peteromallet Mar 18, 2026
986f884
fix: keep framework caches out of persisted review state
peteromallet Mar 18, 2026
34e7f1d
fix: auto-resolve stale issues when zone policy reclassifies files
peteromallet Mar 18, 2026
304b83e
docs: rename session_token placeholder to avoid Snyk W007 false positive
peteromallet Mar 18, 2026
3beaff4
fix: use certifi CA bundle for update-skill SSL on macOS
peteromallet Mar 18, 2026
ac8e7a0
fix: add Windows font fallbacks for scorecard rendering
peteromallet Mar 18, 2026
671ade9
docs: add README explaining work queue ordering and pre/post-triage m…
peteromallet Mar 18, 2026
829bffd
docs: add high-level process overview to README and fix work queue docs
peteromallet Mar 18, 2026
1b65910
docs: document exact filter chain for default queue items
peteromallet Mar 18, 2026
c7b23c1
fix: bias triage away from test-writing busy work
peteromallet Mar 18, 2026
9a1a535
fix: skip cmd /c wrapping for .exe binaries on Windows
peteromallet Mar 18, 2026
32e8d1c
feat: add progression log — append-only lifecycle event timeline
peteromallet Mar 19, 2026
63c03f8
chore: bump version to 0.9.11
peteromallet Mar 19, 2026
bc333c2
fix: update test paths after docs → dev reorganization
peteromallet Mar 19, 2026
6225781
chore: bump version to 0.9.12
peteromallet Mar 19, 2026
dcca79a
Merge pull request #450 from sims1253/feat/r-code-smell-detectors
peteromallet Mar 19, 2026
b9e4b22
Merge remote-tracking branch 'origin/main' into 0.9.12
peteromallet Mar 19, 2026
994a296
chore: move docs/ and website/ into dev/
peteromallet Mar 19, 2026
581a5c6
chore: track dev/review/ — review pipeline prompts, schema, and results
peteromallet Mar 19, 2026
350d93f
feat: add `desloppify setup` for universal global skill install
peteromallet Mar 20, 2026
d002918
refactor: trim overzealous scope from setup command
peteromallet Mar 20, 2026
ecc2686
docs: add explicit "run next after scan" instruction to skill doc
peteromallet Mar 20, 2026
843ce33
docs: tighten skill description to reduce false activations
peteromallet Mar 20, 2026
cf6f14a
fix: force-rescan now injects stale subjective reviews into queue
peteromallet Mar 20, 2026
c2de605
fix: mark clusters done when all items are resolved
peteromallet Mar 20, 2026
bcd2bec
fix: don't supersede resolved items from plan clusters
peteromallet Mar 20, 2026
eb95500
fix: force-rescan bypasses queue-empty guard for reconciliation
peteromallet Mar 20, 2026
1d22f25
feat: strategist CEO role — trend validation, confirmation gate, stra…
peteromallet Mar 20, 2026
6279cf5
fix: strategist saves state for strategic issues + detects cross-cycl…
peteromallet Mar 20, 2026
250a289
feat: bulletproof strategist — all-time high, recovering trend, save_…
peteromallet Mar 20, 2026
8411efe
fix: force UTF-8 encoding in review runner log and payload reads
peteromallet Mar 21, 2026
3680534
fix: support src-layout Python projects in test_coverage detector
peteromallet Mar 21, 2026
bb531de
fix: prevent Knip hang when not installed as project dependency
peteromallet Mar 21, 2026
fd0c0fe
fix: stale subjective reviews always sync regardless of queue state
peteromallet Mar 21, 2026
344cca2
fix: stale subjective reviews always sync regardless of queue state
peteromallet Mar 21, 2026
5b21892
fix: phase ordering — stale subjective reviews take priority over que…
peteromallet Mar 21, 2026
915959f
chore: review pipeline results for PRs #495, #493, #489, #189 and iss…
peteromallet Mar 21, 2026
9d586c6
feat: disable subjective anti-gaming integrity policy
peteromallet Mar 21, 2026
23f5838
fix: always supplement graph imports with source parsing for test cov…
peteromallet Mar 21, 2026
2d740c3
fix: Python import regex handles parenthesized multi-line imports
peteromallet Mar 21, 2026
de9ca3d
chore: bump version to 0.9.13
peteromallet Mar 21, 2026
0594114
fix: add lower-bound guard in fix_debug_logs to prevent negative-inde…
peteromallet Mar 22, 2026
9c6259b
fix: scope .gitignore CLAUDE.md/AGENTS.md rules to root-level only
peteromallet Mar 22, 2026
5990369
feat: bundle all 11 skill overlays with sync guard and pre-commit hook
peteromallet Mar 22, 2026
76c6674
feat: make global install the primary skill delivery mechanism
peteromallet Mar 22, 2026
b6bbdd1
fix: false positives in orphaned, hardcoded_secret_name, and cycles d…
peteromallet Mar 22, 2026
dd7a67a
chore: review pipeline — bias to action, ask maintainer when unsure
peteromallet Mar 22, 2026
33d910f
chore: bump version to 0.9.14
peteromallet Mar 22, 2026
1d27367
fix: skip tree-sitter spec tests when grammar not available in CI
peteromallet Mar 22, 2026
0f3ceb1
fix: skip tree-sitter spec tests when grammar not available in CI
peteromallet Mar 22, 2026
3f7d3f1
feat: simplify lifecycle phases to plan/execute modes
peteromallet Mar 23, 2026
a66c5bd
refactor: remove legacy phase inference, unify snapshot derivation
peteromallet Mar 23, 2026
ebd953e
feat: hide lifecycle jargon from users, auto-resolve communicate-score
peteromallet Mar 23, 2026
7f4ea47
refactor: enforce single-writer lifecycle, eliminate side-channels
peteromallet Mar 23, 2026
170ce7a
feat: add plan_checkpoint as canonical score checkpoint with sparkline
peteromallet Mar 23, 2026
8446f59
fix: stale focus counts across status/next/scan commands
peteromallet Mar 23, 2026
a64c17e
fix: check all graph keys for normalization, not just first 3
peteromallet Mar 23, 2026
62fc683
refactor: consolidate lifecycle phase derivation and fix force-rescan…
peteromallet Mar 23, 2026
1442237
fix: add explicit UTF-8 encoding to external tool report readers
peteromallet Mar 24, 2026
98ed713
docs: add v0.9.14 release notes draft
peteromallet Mar 24, 2026
19b9ebe
Merge branch '0.9.14'
peteromallet Mar 24, 2026
fbc66fa
chore: bump version to 0.9.15
peteromallet Mar 24, 2026
b1a5eea
fix: cross-extension test-to-source mapping for TypeScript (.test.ts …
peteromallet Mar 24, 2026
c9448ec
license: switch from MIT to OSNL v0.2
peteromallet Mar 24, 2026
f149d89
docs: update license references from MIT to OSNL-0.2
peteromallet Mar 24, 2026
82e7699
docs: update license references from MIT to OSNL-0.2
peteromallet Mar 24, 2026
e2fdfa0
feat: add OpenCode as alternative batch review runner (with adjustments)
peteromallet Mar 26, 2026
871f561
fix: normalize_step crashes on string input from --steps CLI arg
peteromallet Mar 26, 2026
e75f74e
fix: do_import_run now respects allow_partial for missing batch results
peteromallet Mar 26, 2026
fcbb5af
feat: add JavaScript test_coverage hooks for test mapping
peteromallet Apr 6, 2026
20941f0
fix: recognize Deno std/assert function-call assertions in TypeScript…
peteromallet Apr 6, 2026
72a2b34
feat(r): add test coverage hooks for R testthat convention (with adju…
peteromallet Apr 6, 2026
b019f58
fix: handle Rust grouped use declarations in unused import detector
peteromallet Apr 6, 2026
f09fb22
fix: detect implicit lock guard drops at block scope boundaries in as…
peteromallet Apr 6, 2026
94936fc
fix: pass state to StageRunContext in codex triage pipeline
peteromallet Apr 6, 2026
e266a2a
feat: add Next.js App Router framework awareness to orphan detector
peteromallet Apr 6, 2026
42f2295
fix: default to batches of 4-5 in review orchestrator prompts
peteromallet Apr 6, 2026
a084a7c
docs: add guidance for monorepo and multi-project directory scanning
peteromallet Apr 6, 2026
8174b06
chore: bump version to 0.9.16
peteromallet Apr 6, 2026
5cfa280
docs(license): clearer headers and TL;DR
peteromallet Apr 7, 2026
7261279
fix: keep imported review findings executable in queue snapshot
peteromallet Apr 25, 2026
c9db34b
fix: cap incompatible tree-sitter language pack
peteromallet May 13, 2026
3c9187d
fix: package viz template in installed builds
peteromallet May 13, 2026
5f65a41
fix: handle Rust strings in shared brace matching
peteromallet May 13, 2026
fbb4f36
fix: preserve legacy uncommitted plan findings
peteromallet May 13, 2026
e7b56d5
fix: handle validator exceptions as batch failures
peteromallet May 13, 2026
ecd96f3
fix: guard subjective scoring against null detail
peteromallet May 13, 2026
596b1ed
fix: handle same-line else in empty if-chain removal
peteromallet May 13, 2026
d9deab3
fix: preserve manual cluster queue members
peteromallet May 13, 2026
2b11d25
fix: guard move destinations against overwrite
peteromallet May 13, 2026
b2fbc01
fix: preserve hidden path prefixes in exclusions
peteromallet May 13, 2026
b9736b0
fix: use live state for organize enrichment checks
peteromallet May 13, 2026
1860dd6
fix: replace full Python relative import lines on move
peteromallet May 13, 2026
f8cf041
fix: mark all resolved empty clusters done
peteromallet May 13, 2026
21ae03d
fix: reject orphan cluster step flags
peteromallet May 13, 2026
65a7fd6
fix: propagate runtime context to review prefetch workers
peteromallet May 13, 2026
c1bce81
feat: add R air formatter and review coverage hooks
peteromallet May 13, 2026
a492400
fix: allow plan resolve to expand small clusters
peteromallet May 13, 2026
573c197
fix: auto-resolve stale findings from confirmed detector runs
peteromallet May 13, 2026
a928901
fix: resolve TS relative imports from source root
peteromallet May 13, 2026
d61374d
fix: classify Rust sibling test files as test zone
peteromallet May 13, 2026
676b510
fix: reuse prepared review packets for batch runs
peteromallet May 13, 2026
350d1af
chore: record review decisions for batch packet issues
peteromallet May 13, 2026
0b48f78
fix: reject file paths for scan root
peteromallet May 13, 2026
805f828
chore: record review decision for scan file path
peteromallet May 13, 2026
94f559e
fix: align detect and show detector lookups
peteromallet May 13, 2026
fc421da
chore: record review decisions for detector lookup issues
peteromallet May 13, 2026
2a8439b
fix: unify skip and suppress attestation phrases
peteromallet May 13, 2026
fcbc732
chore: record review decision for attestation phrases
peteromallet May 13, 2026
350eb60
fix: reset narrative plateau streak on score changes
peteromallet May 13, 2026
9072266
chore: record review decision for plateau narrative
peteromallet May 13, 2026
9cf78b2
fix: adapt generic detect commands to cli args
peteromallet May 13, 2026
c7635e7
chore: record review decision for generic detect args
peteromallet May 13, 2026
e7eedb8
fix: disable generic rust unused import detection
peteromallet May 13, 2026
ff73919
chore: record review decisions for rust unused imports
peteromallet May 13, 2026
a67050b
fix: disable generic rust cycle findings
peteromallet May 13, 2026
23784b0
chore: record review decisions for rust cycles
peteromallet May 13, 2026
04b1cfa
fix: avoid rust async lock false positives after release
peteromallet May 13, 2026
a847fdb
chore: record review decision for rust async locking
peteromallet May 13, 2026
e2c4f09
docs: clarify review subagent limits
peteromallet May 13, 2026
d9ba70b
chore: record review decisions for subagent guidance
peteromallet May 13, 2026
5053e1f
chore: record review decision for multi-project docs
peteromallet May 13, 2026
40c7262
chore: record review decision for codex triage state
peteromallet May 13, 2026
0fecf33
chore: record review decision for nextjs orphans
peteromallet May 13, 2026
3e351c7
feat: add qwen skill install support
peteromallet May 13, 2026
19dacbc
chore: record review decision for qwen support
peteromallet May 13, 2026
5e2d640
fix: allow codex runner sandbox override
peteromallet May 13, 2026
846437b
chore: record review decision for codex sandbox
peteromallet May 13, 2026
6afa56a
test: verify execution constraints reach prompts
peteromallet May 13, 2026
1b309bb
chore: record review decisions for prompt and docs fixes
peteromallet May 13, 2026
3a66f1b
fix: stabilize triage workflow guardrails
peteromallet May 13, 2026
757d03b
chore: record triage workflow decisions
peteromallet May 13, 2026
8b01275
fix: constrain java pmd resources
peteromallet May 13, 2026
425015f
chore: record ci and pmd decisions
peteromallet May 13, 2026
c88eb9e
fix: tighten rust diagnostics
peteromallet May 13, 2026
8dc1bbc
chore: record rust diagnostic decisions
peteromallet May 13, 2026
27913dd
fix: prune resolved plan action refs
peteromallet May 13, 2026
156532e
chore: record queue consistency decisions
peteromallet May 13, 2026
2b4a90f
fix: preserve suppressions across refactors
peteromallet May 13, 2026
469bfd8
chore: record suppression refactor decisions
peteromallet May 13, 2026
21a3c02
fix: kill jscpd process group on timeout
peteromallet May 13, 2026
39f8b5f
chore: record jscpd timeout decision
peteromallet May 13, 2026
e777362
fix: recover review items with context
peteromallet May 13, 2026
6a2ccb7
chore: record review recovery decision
peteromallet May 13, 2026
4d152fa
fix: repair plan skip state after loss
peteromallet May 13, 2026
868b457
chore: record state repair decision
peteromallet May 13, 2026
2d48db7
feat: add per-language scan status
peteromallet May 13, 2026
32b9b9c
chore: record per-language score decision
peteromallet May 13, 2026
9da0e65
fix: reject non-finite numeric values
peteromallet May 13, 2026
e8f0ec3
fix: limit bash source import detection
peteromallet May 13, 2026
3cb0414
fix: preserve typescript else chains
peteromallet May 13, 2026
d01c3b1
chore: record small pr decisions
peteromallet May 13, 2026
3d92333
fix: simplify r assertion patterns
peteromallet May 13, 2026
01fe440
chore: record r coverage decision
peteromallet May 13, 2026
b37edbc
feat: rotate review batch personas
peteromallet May 13, 2026
5afee0b
chore: record persona rotation decision
peteromallet May 13, 2026
cfaf256
fix: ignore comments in fallback syntax scanners
peteromallet May 13, 2026
b15b30d
review: record comment scanner decisions
peteromallet May 13, 2026
589216d
fix: disambiguate reflect ledger tokens
peteromallet May 13, 2026
68dae31
review: record reflect ledger decisions
peteromallet May 13, 2026
806ced7
feat: add Rovo Dev runner support
peteromallet May 13, 2026
71c94f5
review: record Rovo Dev runner decision
peteromallet May 13, 2026
3f40fbf
chore: prepare 1.0 release
peteromallet May 13, 2026
bd15633
sync: reapply 135 OP commits onto current upstream/main
OriginalGary May 13, 2026
2105ca5
bridge: link reapply branch to fork main (no content from main)
OriginalGary May 13, 2026
cf10b4a
sync: add 41 fork-only files OP carried from initial snapshot
OriginalGary May 13, 2026
e2865c2
sync: restore OP version of 10 files where upstream-evolution strippe…
OriginalGary May 13, 2026
c97a79e
sync: remove upstream test_test_coverage.py incompatible with OP test…
OriginalGary May 13, 2026
006f347
sync: restore OP engine/work_queue.py (used by show/scope.py)
OriginalGary May 13, 2026
5916528
docs: document 5 remaining CI test failures as findings (per reapply …
OriginalGary May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 0 additions & 7 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/usr/bin/env bash
set -euo pipefail
# Auto-sync docs/*.md → desloppify/data/global/ before commit.
# Only runs the sync if any docs/*.md files are staged.

Expand All @@ -9,12 +8,6 @@ if [ -z "$staged_docs" ]; then
exit 0
fi

# Prevent mixing staged docs content with unstaged edits.
if ! git diff --quiet -- 'docs/*.md'; then
echo "Unstaged changes detected in docs/*.md. Stage or stash them before commit." >&2
exit 1
fi

# Sync copies from working tree into data/global.
make sync-docs

Expand Down
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@ pytest-full.xml
.claude/
.agents/
/skills/
/CLAUDE.md
/AGENTS.md
tasks/
/scripts/
cotton-desloppify/
review/results/
review/__pycache__/
dev/review/__pycache__/
dev/website/
dev/release/release-notes-drafts/

# Claude Code agent state — never commit
.claude/agent-memory/
Expand Down
170 changes: 156 additions & 14 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,163 @@
MIT License
Open Source Native License (OSNL)
Version 0.2 - March 24, 2026

Copyright (c) 2025 Peter O'Malley
Copyright (c) 2025-2026 Peter O'Malley

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
TL;DR (not legally binding — see full text below)

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- Free for anyone to use internally, including commercial companies. Use it
on personal projects, in research, or as a tool inside your business —
no fee, no registration.
- Free to ship inside a product you sell IF your company is itself open
source (primary business assets under an OSI-approved license or OSNL).
- Paid tiers only apply if you redistribute the Program in a product/service
AND your company is not open source — see Section 2(c) for the tiers.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Preamble

The Open Source Native License (OSNL) allows anyone — individuals and
organizations alike — to use this software for their own internal purposes.
Commercialization (distributing it as part of a product or service, or offering
it to third parties) is unrestricted for entities who open source their primary
business assets. Non-open source entities require a separate commercial license
to commercialize it.

This approach balances the benefits of open-source development with the
realities of commercial enterprise — keeping software a shared, community-driven
resource while enabling businesses to thrive in an open-source ecosystem.

1. Definitions

- "This License" refers to Version 0.2 of the Open Source Native License.
- "The Program" refers to the software distributed under this License.
- "You" refers to the individual or entity utilizing or contributing to the
Program.
- "Primary Business Assets" are the core resources, capabilities, and
technology that constitute the main value proposition and operational basis
of a business.
- "The Licensor" refers to Peter O'Malley.

2. Grant of License

Subject to the terms and conditions of this License, you are hereby granted a
free, perpetual, worldwide, non-exclusive, no-charge, royalty-free license to
use, reproduce, modify, distribute, and sublicense the Program, subject to
the termination provisions in Section 6 and provided that any sublicense is
granted under the terms of this License.

a) Using the Program — Always Free (Anyone, Including Companies)

Any person or organization may use, modify, and contribute to the Program
for their own internal purposes without restriction. This includes personal
projects, education, research, internal tooling, and using the Program to
improve your own codebase — regardless of whether you are an individual, a
nonprofit, or a commercial entity. No additional license is required for
internal use.

b) Shipping the Program in Your Product — Free for Open Source Companies

If you distribute the Program or a derivative as part of a product or
service, or otherwise offer it to third parties, you may do so freely and
at no cost provided that your primary business assets — including core
technologies, software, and platforms — are available under an OSI-approved
open source license or under this License (OSNL). This condition applies
only to primary business assets, not to ancillary or peripheral services.

c) Shipping the Program in Your Product — Paid Tiers for Non-Open Source Companies

If you wish to distribute the Program or a derivative as part of a product
or service, or otherwise offer it to third parties, and you do not meet the
open source condition in section (b), the following terms apply:

- If your organization has raised less than $1,000,000 USD in total funding
and has less than $1,000,000 USD in annual revenue, no license fee or
registration is required. You may commercialize the Program freely.

- If your organization has raised $1,000,000 USD or more in total funding,
or has $1,000,000 USD or more in annual revenue, the license fee is
$1,000 USD per month.

- If your organization has $10,000,000 USD or more in annual revenue, the
license fee is $5,000 USD per month.

- If your organization has $100,000,000 USD or more in annual revenue, the
license fee is $10,000 USD per month.

Your tier is determined by your organization's current status. If your
revenue or funding crosses a tier threshold, the new fee applies from the
following calendar month.

"Total funding raised" includes equity, debt, and convertible instruments
but excludes revenue. For paid tiers, contact the Licensor at
peter@omalley.io to arrange payment.

3. Redistribution

You may reproduce and distribute copies of the Program or derivative works
thereof in any medium, with or without modifications, provided that you meet
the following conditions:

- You must give any recipients of the Program a copy of this License.
- You must ensure that any modified files carry prominent notices stating that
you changed the files.
- Any distribution of the Program or derivative works must comply with the
applicable use category in Section 2.

4. Patent Grant

Each contributor to the Program hereby grants you a perpetual, worldwide,
non-exclusive, no-charge, royalty-free patent license to make, have made, use,
offer to sell, sell, import, and otherwise transfer the Program, where such
license applies only to those patent claims licensable by the contributor that
are necessarily infringed by their contribution(s) alone or in combination with
the Program.

If you institute patent litigation against any entity (including a cross-claim
or counterclaim in a lawsuit) alleging that the Program constitutes patent
infringement, then any patent licenses granted to you under this License for
the Program shall terminate as of the date such litigation is filed.

5. Disclaimer of Warranty

THE PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
OUT OF OR IN CONNECTION WITH THE USE OF THE PROGRAM OR OTHER DEALINGS IN THE
PROGRAM.

6. Termination

Your rights under this License will terminate automatically if you fail to
comply with any of its terms. However, if you become compliant, then your
rights under this License are reinstated:

- Provisionally, unless and until the Licensor explicitly and finally
terminates your rights, and
- Permanently, if the Licensor does not notify you of the non-compliance
within 60 days after you have become compliant.

Moreover, your rights under this License are reinstated permanently if the
Licensor notifies you of the non-compliance and it is the first time you have
received notice of non-compliance with this License, and you cure the
non-compliance within 30 days after receipt of the notice.

Termination of your rights under this section does not terminate the licenses
of parties who have received copies or rights from you under this License,
provided those parties remain in full compliance.

7. Version Upgrade

You may choose to follow the terms of this version of the OSNL or any later
version as published by the Licensor. No one other than the Licensor has the
right to modify or publish new versions of this License. Each version will be
given a distinguishing version number.

8. General

This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Program.

For commercial licensing inquiries: peter@omalley.io
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ package-smoke: install-ci-tools
python -m pip install --upgrade pip && \
WHEEL=$$(ls -t dist/desloppify-*.whl | head -n 1) && \
python -m pip install "$$WHEEL[full]" && \
python -c "from importlib.resources import files; from pathlib import Path; docs=Path('docs'); bundled=files('desloppify.data.global'); docs_names=set(p.name for p in docs.glob('*.md')); assert docs_names; bundled_names=set(r.name for r in bundled.iterdir() if r.name.endswith('.md')); missing=sorted(docs_names-bundled_names); assert not missing, f'missing bundled docs: {missing}'; extra=sorted(bundled_names-docs_names); assert not extra, f'extra bundled docs not in docs/: {extra}'; mismatched=[name for name in sorted(docs_names) if bundled.joinpath(name).read_text(encoding='utf-8') != (docs / name).read_text(encoding='utf-8')]; assert not mismatched, f'mismatched bundled docs: {mismatched}'" && \
python -c "from importlib.resources import files; from pathlib import Path; docs=Path('docs'); bundled=files('desloppify.data.global'); names=sorted(p.name for p in docs.glob('*.md')); assert names; missing=[name for name in names if not bundled.joinpath(name).is_file()]; assert not missing, f'missing bundled docs: {missing}'; mismatched=[name for name in names if bundled.joinpath(name).read_text(encoding='utf-8') != (docs / name).read_text(encoding='utf-8')]; assert not mismatched, f'mismatched bundled docs: {mismatched}'" && \
python -c "import importlib.metadata as m,sys; extras=set(m.metadata('desloppify').get_all('Provides-Extra') or []); required={'full','treesitter','python-security','scorecard'}; missing=required-extras; print('missing extras metadata:', sorted(missing)) if missing else None; sys.exit(1 if missing else 0)" && \
desloppify --help > /dev/null
rm -rf .pkg-smoke
Expand Down
Loading
Loading