@fraction12/deepclean 0.1.0-alpha.0 → 0.1.0-alpha.1
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 +8 -1
- package/README.md +60 -39
- package/dist/args.js +43 -0
- package/dist/args.js.map +1 -1
- package/dist/cli.js +1782 -39
- package/dist/cli.js.map +1 -1
- package/dist/defaults.js +11 -0
- 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/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 +27 -1
- package/dist/state.js +146 -1
- package/dist/state.js.map +1 -1
- package/dist/synthesis.d.ts +13 -1
- package/dist/synthesis.js +33 -7
- package/dist/synthesis.js.map +1 -1
- package/dist/types.d.ts +465 -2
- package/dist/types.js +266 -0
- package/dist/types.js.map +1 -1
- package/docs/privacy-and-trust.md +19 -0
- package/docs/public-readiness.md +1 -1
- package/docs/release.md +86 -0
- package/docs/troubleshooting.md +138 -0
- package/package.json +23 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.0-alpha.1 - 2026-05-27
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
- Softened the public site, README, and package copy to frame Deepclean around clearer structure and focused improvements instead of criticizing the user's code.
|
|
9
|
+
- Set the GitHub Pages site as the public project homepage and documented it in the README.
|
|
10
|
+
- 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.
|
|
11
|
+
- Added explicit PR checkpoints and dogfood evidence for `complete-operating-loop-parity`.
|
|
5
12
|
- 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
13
|
- Added explicit `reportPath`, `markdownPath`, `jsonPath`, and `planPath` fields to JSON output for automation.
|
|
7
14
|
- 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 +26,4 @@
|
|
|
19
26
|
- Added SARIF ingestion and optional `jscpd` external duplicate evidence.
|
|
20
27
|
- Removed self-dogfood state from the repo working tree and tightened ignore rules for local artifacts.
|
|
21
28
|
- 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
|
|
29
|
+
- 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,17 +19,18 @@ 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
|
+
To include local Codex synthesis:
|
|
29
34
|
|
|
30
35
|
```bash
|
|
31
36
|
deepclean scan --synthesize --json
|
|
@@ -40,10 +45,11 @@ deepclean --root ./some-repo scan --synthesize
|
|
|
40
45
|
deepclean scan --root ./some-repo --synthesize
|
|
41
46
|
```
|
|
42
47
|
|
|
43
|
-
##
|
|
48
|
+
## Workflow
|
|
44
49
|
|
|
45
50
|
```bash
|
|
46
51
|
deepclean init
|
|
52
|
+
deepclean map
|
|
47
53
|
deepclean scan
|
|
48
54
|
deepclean scan --synthesize
|
|
49
55
|
deepclean report
|
|
@@ -55,20 +61,29 @@ deepclean triage <candidate-id> --status ignored --note "intentional boundary"
|
|
|
55
61
|
deepclean handoff <candidate-id> --format codex
|
|
56
62
|
```
|
|
57
63
|
|
|
58
|
-
##
|
|
64
|
+
## What It Produces
|
|
65
|
+
|
|
66
|
+
Deepclean writes durable local artifacts under `.deepclean/`:
|
|
67
|
+
|
|
68
|
+
- `runs/` - scan metadata
|
|
69
|
+
- `features/` - semantic feature/work-unit maps
|
|
70
|
+
- `evidence/` - raw local evidence records
|
|
71
|
+
- `candidates/` - cleanup candidates
|
|
72
|
+
- `clusters/` - related cleanup themes
|
|
73
|
+
- `reports/` - Markdown and JSON reports
|
|
74
|
+
- `plans/` - focused implementation plans
|
|
75
|
+
- `handoffs/` - agent-ready task packets
|
|
76
|
+
- `triage/` - local triage notes
|
|
59
77
|
|
|
60
|
-
|
|
61
|
-
- Structured local evidence before model review.
|
|
62
|
-
- Durable state under `.deepclean/`.
|
|
63
|
-
- Local code stays local unless the user explicitly enables researched context.
|
|
64
|
-
- Architecture review is one reviewer, not the whole product.
|
|
78
|
+
Add `.deepclean/` to `.gitignore` unless the repo deliberately wants to share generated reports.
|
|
65
79
|
|
|
66
|
-
## Agent
|
|
80
|
+
## JSON And Agent Use
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
Core commands support `--json` for automation:
|
|
69
83
|
|
|
70
84
|
```bash
|
|
71
85
|
deepclean scan --json
|
|
86
|
+
deepclean map --json
|
|
72
87
|
deepclean scan --synthesize --json
|
|
73
88
|
deepclean report --json
|
|
74
89
|
deepclean cluster --json
|
|
@@ -87,13 +102,29 @@ Useful global flags:
|
|
|
87
102
|
- `--quiet`
|
|
88
103
|
- `--debug`
|
|
89
104
|
|
|
105
|
+
## Local Evidence
|
|
106
|
+
|
|
107
|
+
Deepclean runs local evidence first and optional model synthesis second. The built-in evidence layer includes:
|
|
108
|
+
|
|
109
|
+
- semantic feature mapping for package scripts, TS/JS modules/routes/components, Python modules, test suites, and config files
|
|
110
|
+
- file metrics
|
|
111
|
+
- normalized line-window duplication
|
|
112
|
+
- source/import graph summaries
|
|
113
|
+
- TypeScript and JavaScript function structure
|
|
114
|
+
- Python import graph support
|
|
115
|
+
- git churn signals
|
|
116
|
+
- nearby test discovery
|
|
117
|
+
- SARIF ingestion from Semgrep or similar tools
|
|
118
|
+
- optional Semgrep SARIF orchestration
|
|
119
|
+
- optional `jscpd` duplicate ingestion
|
|
120
|
+
|
|
121
|
+
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.
|
|
122
|
+
|
|
90
123
|
## Codex Synthesis
|
|
91
124
|
|
|
92
125
|
`deepclean scan --synthesize` runs the local `codex` CLI in read-only mode over the collected evidence bundle. The model is asked to return strict JSON, and candidates without valid evidence IDs are rejected.
|
|
93
126
|
|
|
94
|
-
Synthesis uses a built-in reviewer pack
|
|
95
|
-
|
|
96
|
-
The reviewer pack is informed by a vendored MIT-licensed snapshot of Matt Pocock's engineering skills. Deepclean uses those skills as reference material and distills the useful principles into stable built-in rubrics instead of loading the full upstream skill text dynamically on every run.
|
|
127
|
+
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
128
|
|
|
98
129
|
Reviewer packs can be configured in `.deepclean/config.json`:
|
|
99
130
|
|
|
@@ -106,37 +137,21 @@ Reviewer packs can be configured in `.deepclean/config.json`:
|
|
|
106
137
|
}
|
|
107
138
|
```
|
|
108
139
|
|
|
109
|
-
Before prompting Codex, Deepclean also maps evidence and existing local candidates into bounded cleanup surfaces. This is the Clawpatch-inspired part: the model reviews mapped repo areas and graph-connected themes rather than a loose pile of metrics.
|
|
110
|
-
|
|
111
140
|
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.
|
|
112
141
|
|
|
113
|
-
See [
|
|
142
|
+
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
143
|
|
|
115
144
|
## Themes And Plans
|
|
116
145
|
|
|
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.
|
|
146
|
+
`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
147
|
|
|
124
|
-
|
|
148
|
+
`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
149
|
|
|
126
|
-
|
|
150
|
+
Broad themes are marked `too-broad` when they should not be handed to an agent as one task.
|
|
127
151
|
|
|
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
|
|
152
|
+
## External Analyzer Evidence
|
|
138
153
|
|
|
139
|
-
|
|
154
|
+
Deepclean can ingest SARIF and duplicate-detection output:
|
|
140
155
|
|
|
141
156
|
```json
|
|
142
157
|
{
|
|
@@ -169,3 +184,9 @@ npm run release:check
|
|
|
169
184
|
```
|
|
170
185
|
|
|
171
186
|
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.
|
|
187
|
+
|
|
188
|
+
Publishing is handled by GitHub Actions trusted publishing. See [Release](docs/release.md).
|
|
189
|
+
|
|
190
|
+
## Inspiration
|
|
191
|
+
|
|
192
|
+
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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"}
|