@fraction12/deepclean 0.1.0-alpha.0 → 0.1.0-alpha.2
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.
- package/CHANGELOG.md +15 -1
- package/README.md +72 -46
- package/dist/args.js +43 -0
- package/dist/args.js.map +1 -1
- package/dist/cli.js +1954 -40
- package/dist/cli.js.map +1 -1
- package/dist/defaults.js +12 -1
- package/dist/defaults.js.map +1 -1
- package/dist/features.d.ts +13 -0
- package/dist/features.js +286 -0
- package/dist/features.js.map +1 -0
- package/dist/identity.d.ts +15 -0
- package/dist/identity.js +183 -0
- package/dist/identity.js.map +1 -0
- package/dist/locks.d.ts +37 -0
- package/dist/locks.js +179 -0
- package/dist/locks.js.map +1 -0
- package/dist/plans.js +2 -2
- package/dist/plans.js.map +1 -1
- package/dist/reporting.js +3 -1
- package/dist/reporting.js.map +1 -1
- package/dist/revalidation.d.ts +8 -0
- package/dist/revalidation.js +114 -0
- package/dist/revalidation.js.map +1 -0
- package/dist/state.d.ts +31 -1
- package/dist/state.js +170 -1
- package/dist/state.js.map +1 -1
- package/dist/synthesis.d.ts +16 -2
- package/dist/synthesis.js +295 -30
- package/dist/synthesis.js.map +1 -1
- package/dist/types.d.ts +550 -2
- package/dist/types.js +321 -0
- package/dist/types.js.map +1 -1
- package/docs/privacy-and-trust.md +25 -1
- package/docs/public-readiness.md +1 -1
- package/docs/release.md +86 -0
- package/docs/troubleshooting.md +139 -2
- package/package.json +24 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.0-alpha.2 - 2026-05-27
|
|
6
|
+
|
|
7
|
+
- Changed `scan` and CI-style scans to request Codex synthesis by default after local evidence collection, with `--evidence-only` as the deterministic-only escape hatch.
|
|
8
|
+
- Added synthesis attempt ledgers with validation checks, failure records for malformed provider output, and final candidate ID alignment after ranking.
|
|
9
|
+
- Included `.deepclean/synthesis/` in doctor/status/prune retention so synthesis artifacts are visible, validated, and cleaned up with the rest of a run.
|
|
10
|
+
- Refined the public site hero and motion treatment after UAT.
|
|
11
|
+
|
|
12
|
+
## 0.1.0-alpha.1 - 2026-05-27
|
|
13
|
+
|
|
14
|
+
- Added semantic feature mapping with `.deepclean/features/` artifacts, `deepclean map`, scan feature counts, and first-pass package script, TS/JS, Python, test-suite, route/component/module, and config feature records.
|
|
15
|
+
- Softened the public site, README, and package copy to frame Deepclean around clearer structure and focused improvements instead of criticizing the user's code.
|
|
16
|
+
- Set the GitHub Pages site as the public project homepage and documented it in the README.
|
|
17
|
+
- Added the complete operating loop: health/status, stable finding identity, lifecycle history, revalidation, incremental scans, CI policy mode, shared query filters, writer locks, retention pruning, source-safe exports, provider runtime controls, and guarded local fix attempts.
|
|
18
|
+
- Added explicit PR checkpoints and dogfood evidence for `complete-operating-loop-parity`.
|
|
5
19
|
- Added repo-specific verification inference so generated candidates and plans point at real local checks such as Makefile targets, frontend package scripts, and admin package scripts instead of generic commands.
|
|
6
20
|
- Added explicit `reportPath`, `markdownPath`, `jsonPath`, and `planPath` fields to JSON output for automation.
|
|
7
21
|
- Improved Markdown reports with a focused `Agent Queue`, bounded themes before too-broad themes, and a capped candidate appendix while preserving full raw records in JSON.
|
|
@@ -19,4 +33,4 @@
|
|
|
19
33
|
- Added SARIF ingestion and optional `jscpd` external duplicate evidence.
|
|
20
34
|
- Removed self-dogfood state from the repo working tree and tightened ignore rules for local artifacts.
|
|
21
35
|
- Added a vendored MIT-licensed Matt Pocock skills reference snapshot and distilled reviewer rubrics for deep module discipline, feedback loops, and agent-ready cleanup slices.
|
|
22
|
-
- Hardened
|
|
36
|
+
- Hardened cleanup-surface mapping: TS/JS `.js` source specifiers now resolve to local TS source files, dynamic imports and `require(...)` are included in graph evidence, optional Semgrep orchestration is supported, report recommendations prefer strong synthesized findings over weak metric noise, and generated plans dedupe repeated file references.
|
package/README.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# deepclean
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Local repo structure reports for fast-moving codebases.
|
|
4
4
|
|
|
5
|
-
`deepclean`
|
|
5
|
+
`deepclean` scans a repository, gathers local evidence, and writes reports and agent-ready plans under `.deepclean/`. It is built for the point where a project is already working and the next step is clearer boundaries, less duplication, safer refactors, stronger tests, and better sequencing.
|
|
6
|
+
|
|
7
|
+
Deepclean does not edit your source code.
|
|
8
|
+
|
|
9
|
+
Website: https://fraction12.github.io/deepclean/
|
|
6
10
|
|
|
7
11
|
## Status
|
|
8
12
|
|
|
9
|
-
Public
|
|
13
|
+
Public alpha. TypeScript, JavaScript, and Python evidence are supported.
|
|
10
14
|
|
|
11
15
|
## Install
|
|
12
16
|
|
|
@@ -15,66 +19,80 @@ npm install -g @fraction12/deepclean
|
|
|
15
19
|
deepclean --version
|
|
16
20
|
```
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
## Quick Start
|
|
19
23
|
|
|
20
24
|
```bash
|
|
21
25
|
deepclean init
|
|
26
|
+
deepclean map
|
|
22
27
|
deepclean scan --json
|
|
23
28
|
deepclean report
|
|
24
29
|
deepclean next
|
|
25
30
|
deepclean plan candidate-001
|
|
26
31
|
```
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
`deepclean scan` collects local evidence first, then runs Codex synthesis by default. Use evidence-only mode when you only want deterministic local analysis:
|
|
29
34
|
|
|
30
35
|
```bash
|
|
31
|
-
deepclean scan --
|
|
36
|
+
deepclean scan --evidence-only --json
|
|
32
37
|
deepclean report
|
|
33
|
-
deepclean plan theme-001
|
|
34
38
|
```
|
|
35
39
|
|
|
36
40
|
Global flags work before or after the command:
|
|
37
41
|
|
|
38
42
|
```bash
|
|
39
|
-
deepclean --root ./some-repo scan
|
|
40
|
-
deepclean scan --root ./some-repo --
|
|
43
|
+
deepclean --root ./some-repo scan
|
|
44
|
+
deepclean scan --root ./some-repo --evidence-only
|
|
41
45
|
```
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
Older examples may include `deepclean scan --synthesize`; that flag still works, but it is no longer required. Plain `deepclean scan` is the normal synthesized path. Use `--evidence-only`, `--offline`, or `--local-only` when a run must avoid provider execution.
|
|
48
|
+
|
|
49
|
+
## Workflow
|
|
44
50
|
|
|
45
51
|
```bash
|
|
46
52
|
deepclean init
|
|
53
|
+
deepclean map
|
|
47
54
|
deepclean scan
|
|
48
|
-
deepclean scan --synthesize
|
|
49
55
|
deepclean report
|
|
50
56
|
deepclean cluster
|
|
51
57
|
deepclean plan theme-001 --format codex
|
|
52
58
|
deepclean next
|
|
53
59
|
deepclean show <candidate-id>
|
|
60
|
+
deepclean explain <candidate-or-finding-id>
|
|
54
61
|
deepclean triage <candidate-id> --status ignored --note "intentional boundary"
|
|
55
62
|
deepclean handoff <candidate-id> --format codex
|
|
56
63
|
```
|
|
57
64
|
|
|
58
|
-
##
|
|
65
|
+
## What It Produces
|
|
66
|
+
|
|
67
|
+
Deepclean writes durable local artifacts under `.deepclean/`:
|
|
59
68
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
69
|
+
- `runs/` - scan metadata
|
|
70
|
+
- `features/` - semantic feature/work-unit maps
|
|
71
|
+
- `evidence/` - raw local evidence records
|
|
72
|
+
- `synthesis/` - provider attempt ledgers, prompt manifests, and candidate validation results
|
|
73
|
+
- `candidates/` - cleanup candidates
|
|
74
|
+
- `clusters/` - related cleanup themes
|
|
75
|
+
- `reports/` - Markdown and JSON reports
|
|
76
|
+
- `plans/` - focused implementation plans
|
|
77
|
+
- `handoffs/` - agent-ready task packets
|
|
78
|
+
- `triage/` - local triage notes
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
Add `.deepclean/` to `.gitignore` unless the repo deliberately wants to share generated reports.
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
## JSON And Agent Use
|
|
83
|
+
|
|
84
|
+
Core commands support `--json` for automation:
|
|
69
85
|
|
|
70
86
|
```bash
|
|
71
87
|
deepclean scan --json
|
|
72
|
-
deepclean
|
|
88
|
+
deepclean map --json
|
|
89
|
+
deepclean scan --evidence-only --json
|
|
73
90
|
deepclean report --json
|
|
74
91
|
deepclean cluster --json
|
|
75
92
|
deepclean plan theme-001 --json
|
|
76
93
|
deepclean next --json
|
|
77
94
|
deepclean show candidate-001 --json
|
|
95
|
+
deepclean explain candidate-001 --json
|
|
78
96
|
deepclean handoff candidate-001 --json
|
|
79
97
|
```
|
|
80
98
|
|
|
@@ -87,13 +105,31 @@ Useful global flags:
|
|
|
87
105
|
- `--quiet`
|
|
88
106
|
- `--debug`
|
|
89
107
|
|
|
108
|
+
## Local Evidence
|
|
109
|
+
|
|
110
|
+
Deepclean runs local evidence first and model synthesis second unless evidence-only or local-only mode is selected. The built-in evidence layer includes:
|
|
111
|
+
|
|
112
|
+
- semantic feature mapping for package scripts, TS/JS modules/routes/components, Python modules, test suites, and config files
|
|
113
|
+
- file metrics
|
|
114
|
+
- normalized line-window duplication
|
|
115
|
+
- source/import graph summaries
|
|
116
|
+
- TypeScript and JavaScript function structure
|
|
117
|
+
- Python import graph support
|
|
118
|
+
- git churn signals
|
|
119
|
+
- nearby test discovery
|
|
120
|
+
- SARIF ingestion from Semgrep or similar tools
|
|
121
|
+
- optional Semgrep SARIF orchestration
|
|
122
|
+
- optional `jscpd` duplicate ingestion
|
|
123
|
+
|
|
124
|
+
For TS/JS projects using NodeNext-style source imports, Deepclean resolves emitted `.js` specifiers back to local `.ts`, `.tsx`, `.mts`, and `.cts` files so the graph maps source boundaries instead of emitted-path noise.
|
|
125
|
+
|
|
90
126
|
## Codex Synthesis
|
|
91
127
|
|
|
92
|
-
`deepclean scan
|
|
128
|
+
`deepclean scan` runs the local `codex` CLI in read-only mode over the collected evidence bundle by default. The model is asked to return strict JSON, and candidates are validated before they are persisted: cited evidence IDs must exist, file paths must be anchored by cited evidence, line ranges must be sane, and optional quotes must match source. Rejected drafts stay in the synthesis attempt ledger as diagnostics rather than becoming open findings.
|
|
93
129
|
|
|
94
|
-
|
|
130
|
+
Use `deepclean explain <candidate-or-finding-id>` to inspect why a candidate exists, which evidence supports it, which validation checks passed, and what fix-readiness guidance was attached.
|
|
95
131
|
|
|
96
|
-
|
|
132
|
+
Synthesis uses a built-in reviewer pack so runs do not depend on arbitrary local agent skills. The current pack looks for architecture boundaries, conceptual duplication, dependency graph risk, testability gaps, domain language drift, agent-sized cleanup slices, and weak findings that should be rejected.
|
|
97
133
|
|
|
98
134
|
Reviewer packs can be configured in `.deepclean/config.json`:
|
|
99
135
|
|
|
@@ -106,37 +142,21 @@ Reviewer packs can be configured in `.deepclean/config.json`:
|
|
|
106
142
|
}
|
|
107
143
|
```
|
|
108
144
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Source samples are redacted from the synthesis prompt by default. Use `--allow-source-in-model` only when the target repository and provider configuration make that acceptable.
|
|
145
|
+
Source samples are redacted from the synthesis prompt by default. Use `--allow-source-in-model` only when the target repository and provider configuration make that acceptable. Use `--evidence-only`, `--offline`, or `--local-only` when no provider should run.
|
|
112
146
|
|
|
113
|
-
See [
|
|
147
|
+
See [Privacy And Trust](docs/privacy-and-trust.md), [Reviewer References](docs/reviewer-references.md), and [Troubleshooting](docs/troubleshooting.md) before using synthesis on private repos.
|
|
114
148
|
|
|
115
149
|
## Themes And Plans
|
|
116
150
|
|
|
117
|
-
`deepclean cluster` groups related candidates into cleanup themes using shared files, shared evidence, module areas, title language, and the local import graph. Themes
|
|
118
|
-
|
|
119
|
-
`deepclean plan <candidate-or-theme-id>` writes a Codex-ready cleanup plan under `.deepclean/plans/`. Use theme plans when the report points at a larger cleanup area such as a tangled Next.js app area or a backend service boundary; use candidate plans for narrow local cleanup.
|
|
120
|
-
|
|
121
|
-
Deepclean currently collects TypeScript, JavaScript, and Python source evidence. The local graph supports TS/JS relative imports and Python module imports, with cache/build/output directories excluded by default.
|
|
122
|
-
For TS/JS projects using NodeNext-style source imports, Deepclean resolves emitted `.js` specifiers back to local `.ts`, `.tsx`, `.mts`, and `.cts` files so the graph maps source boundaries instead of falsely reporting an empty graph.
|
|
151
|
+
`deepclean cluster` groups related candidates into cleanup themes using shared files, shared evidence, module areas, title language, and the local import graph. Themes use stable `theme-001` style IDs. Individual cleanup candidates use `candidate-001` style IDs.
|
|
123
152
|
|
|
124
|
-
|
|
153
|
+
`deepclean plan <candidate-or-theme-id>` writes a focused cleanup plan under `.deepclean/plans/`. Use theme plans for larger cleanup areas and candidate plans for narrow local work.
|
|
125
154
|
|
|
126
|
-
|
|
155
|
+
Broad themes are marked `too-broad` when they should not be handed to an agent as one task.
|
|
127
156
|
|
|
128
|
-
|
|
129
|
-
- normalized line-window duplication
|
|
130
|
-
- source/import graph summaries
|
|
131
|
-
- TypeScript/JavaScript function and wrapper structure
|
|
132
|
-
- Python import graph support
|
|
133
|
-
- git churn signals
|
|
134
|
-
- nearby test discovery
|
|
135
|
-
- SARIF ingestion from Semgrep or similar tools
|
|
136
|
-
- optional Semgrep SARIF orchestration when configured
|
|
137
|
-
- optional `jscpd` duplicate ingestion when configured
|
|
157
|
+
## External Analyzer Evidence
|
|
138
158
|
|
|
139
|
-
|
|
159
|
+
Deepclean can ingest SARIF and duplicate-detection output:
|
|
140
160
|
|
|
141
161
|
```json
|
|
142
162
|
{
|
|
@@ -169,3 +189,9 @@ npm run release:check
|
|
|
169
189
|
```
|
|
170
190
|
|
|
171
191
|
The release check builds the package, runs tests, validates OpenSpec locally when available, packs the tarball, and rejects private/local artifacts such as `.deepclean/`, `.codex/`, `node_modules/`, source files, and local reports.
|
|
192
|
+
|
|
193
|
+
Publishing is handled by GitHub Actions trusted publishing. See [Release](docs/release.md).
|
|
194
|
+
|
|
195
|
+
## Inspiration
|
|
196
|
+
|
|
197
|
+
Deepclean's local artifact workflow was inspired by ClawPatch, but Deepclean is a separate maintainability reporting CLI.
|
package/dist/args.js
CHANGED
|
@@ -51,10 +51,53 @@ const valueFlags = new Set([
|
|
|
51
51
|
"root",
|
|
52
52
|
"state-dir",
|
|
53
53
|
"config",
|
|
54
|
+
"provider",
|
|
54
55
|
"model",
|
|
56
|
+
"effort",
|
|
57
|
+
"timeout",
|
|
58
|
+
"timeout-ms",
|
|
59
|
+
"retries",
|
|
60
|
+
"rpm",
|
|
61
|
+
"concurrency",
|
|
62
|
+
"token-budget",
|
|
63
|
+
"excerpt-budget",
|
|
64
|
+
"privacy-mode",
|
|
65
|
+
"patch",
|
|
66
|
+
"verification-command",
|
|
55
67
|
"status",
|
|
68
|
+
"priority",
|
|
69
|
+
"category",
|
|
70
|
+
"risk",
|
|
71
|
+
"source",
|
|
72
|
+
"theme",
|
|
73
|
+
"path",
|
|
74
|
+
"lifecycle-state",
|
|
75
|
+
"revalidation-state",
|
|
76
|
+
"baseline-status",
|
|
56
77
|
"note",
|
|
57
78
|
"format",
|
|
79
|
+
"since",
|
|
80
|
+
"merge-base",
|
|
81
|
+
"paths",
|
|
82
|
+
"categories",
|
|
83
|
+
"reviewers",
|
|
84
|
+
"output",
|
|
85
|
+
"sarif",
|
|
86
|
+
"lock-timeout-ms",
|
|
87
|
+
"stale-lock-ms",
|
|
88
|
+
"keep-runs",
|
|
89
|
+
"keep-days",
|
|
90
|
+
"max-p0",
|
|
91
|
+
"max-p1",
|
|
92
|
+
"max-p2",
|
|
93
|
+
"max-p3",
|
|
94
|
+
"max-new-p0",
|
|
95
|
+
"max-new-p1",
|
|
96
|
+
"max-new-p2",
|
|
97
|
+
"max-new-p3",
|
|
98
|
+
"max-stale",
|
|
99
|
+
"min-confidence",
|
|
100
|
+
"fail-category",
|
|
58
101
|
]);
|
|
59
102
|
export function legacyParseArgs(argv) {
|
|
60
103
|
const [command, ...rest] = argv;
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,IAAI,OAA2B,CAAC;IAChC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAqC,EAAE,CAAC;IAEnD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACnB,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,MAAM;IACN,WAAW;IACX,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|