@nitra/cursor 12.7.0 → 12.8.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/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
- package/CHANGELOG.md +21 -5
- package/bin/n-cursor.js +1 -1
- package/docs/index.md +3 -3
- package/docs/stryker.config.md +3 -3
- package/lib/docs/index.md +5 -5
- package/lib/docs/llm.md +4 -4
- package/package.json +2 -2
- package/rules/abie/docs/fix.md +8 -8
- package/rules/abie/docs/index.md +3 -3
- package/rules/abie/js/docs/index.md +6 -6
- package/rules/abie/lib/docs/index.md +9 -9
- package/rules/bun/docs/fix.md +5 -5
- package/rules/bun/docs/index.md +3 -3
- package/rules/bun/js/docs/index.md +2 -2
- package/rules/capacitor/docs/fix.md +10 -10
- package/rules/capacitor/docs/index.md +3 -3
- package/rules/capacitor/js/docs/index.md +2 -2
- package/rules/changelog/docs/fix.md +11 -11
- package/rules/changelog/docs/index.md +3 -3
- package/rules/changelog/js/docs/consistency.md +12 -12
- package/rules/changelog/js/docs/index.md +2 -2
- package/rules/changelog/lib/docs/index.md +2 -2
- package/rules/ci4/docs/fix.md +4 -4
- package/rules/ci4/docs/index.md +3 -3
- package/rules/ci4/js/docs/index.md +2 -2
- package/rules/doc-files/docs/index.md +3 -3
- package/rules/doc-files/js/docgen-crc.mjs +2 -8
- package/rules/doc-files/js/docgen-extract.mjs +5 -3
- package/rules/doc-files/js/docgen-files-batch.mjs +18 -3
- package/rules/doc-files/js/docgen-gen.mjs +11 -3
- package/rules/doc-files/js/docgen-judge-measure.mjs +67 -18
- package/rules/doc-files/js/docgen-judge.mjs +8 -1
- package/rules/doc-files/js/docgen-scan.mjs +14 -4
- package/rules/doc-files/js/docs/docgen-crc.md +25 -14
- package/rules/doc-files/js/docs/docgen-extract.md +16 -14
- package/rules/doc-files/js/docs/docgen-files-batch.md +11 -11
- package/rules/doc-files/js/docs/docgen-gen.md +15 -26
- package/rules/doc-files/js/docs/docgen-judge-measure.md +14 -12
- package/rules/doc-files/js/docs/docgen-judge.md +13 -11
- package/rules/doc-files/js/docs/docgen-scan.md +28 -27
- package/rules/doc-files/js/docs/index.md +0 -1
- package/rules/docker/docs/fix.md +6 -6
- package/rules/docker/docs/index.md +3 -3
- package/rules/docker/js/docs/index.md +2 -2
- package/rules/docker/lib/docs/docker-hadolint.md +2 -2
- package/rules/docker/lib/docs/index.md +5 -5
- package/rules/efes/docs/fix.md +8 -8
- package/rules/efes/docs/index.md +3 -3
- package/rules/feedback/docs/fix.md +5 -5
- package/rules/feedback/docs/index.md +3 -3
- package/rules/ga/docs/fix.md +5 -5
- package/rules/ga/docs/index.md +3 -3
- package/rules/ga/js/docs/index.md +3 -3
- package/rules/graphql/docs/fix.md +8 -8
- package/rules/graphql/docs/index.md +3 -3
- package/rules/graphql/docs/main.md +8 -8
- package/rules/graphql/js/docs/index.md +2 -2
- package/rules/graphql/lib/docs/index.md +2 -2
- package/rules/hasura/docs/fix.md +11 -11
- package/rules/hasura/docs/index.md +3 -3
- package/rules/hasura/js/docs/index.md +2 -2
- package/rules/image-avif/docs/fix.md +3 -3
- package/rules/image-avif/docs/index.md +3 -3
- package/rules/image-avif/js/docs/avif_generation.md +6 -6
- package/rules/image-avif/js/docs/index.md +2 -2
- package/rules/image-compress/docs/fix.md +2 -2
- package/rules/image-compress/docs/index.md +3 -3
- package/rules/image-compress/js/docs/index.md +3 -3
- package/rules/{js-lint → js}/docs/fix.md +9 -9
- package/rules/{js-lint → js}/docs/index.md +3 -3
- package/rules/{js-lint → js}/js/docs/check.md +5 -5
- package/rules/{js-lint → js}/js/docs/index.md +4 -4
- package/rules/js-bun-db/docs/fix.md +5 -5
- package/rules/js-bun-db/docs/index.md +3 -3
- package/rules/js-bun-db/js/docs/index.md +2 -2
- package/rules/js-bun-db/lib/docs/index.md +2 -2
- package/rules/js-bun-redis/docs/fix.md +6 -6
- package/rules/js-bun-redis/docs/index.md +3 -3
- package/rules/js-bun-redis/js/docs/index.md +2 -2
- package/rules/js-bun-redis/lib/docs/index.md +2 -2
- package/rules/js-lint-ci/docs/fix.md +3 -3
- package/rules/js-lint-ci/docs/index.md +3 -3
- package/rules/js-lint-ci/js/docs/index.md +2 -2
- package/rules/js-mssql/docs/fix.md +5 -5
- package/rules/js-mssql/docs/index.md +3 -3
- package/rules/js-mssql/js/docs/index.md +2 -2
- package/rules/js-mssql/lib/docs/index.md +2 -2
- package/rules/js-run/docs/fix.md +8 -8
- package/rules/js-run/docs/index.md +3 -3
- package/rules/js-run/js/docs/index.md +2 -2
- package/rules/js-run/lib/docs/index.md +7 -7
- package/rules/k8s/docs/fix.md +4 -4
- package/rules/k8s/docs/index.md +3 -3
- package/rules/k8s/js/docs/index.md +3 -3
- package/rules/nginx-default-tpl/docs/fix.md +7 -7
- package/rules/nginx-default-tpl/docs/index.md +3 -3
- package/rules/nginx-default-tpl/js/docs/index.md +2 -2
- package/rules/nginx-default-tpl/js/docs/template.md +2 -2
- package/rules/npm-module/docs/fix.md +8 -8
- package/rules/npm-module/docs/index.md +3 -3
- package/rules/npm-module/js/docs/header_doc_pointer.md +23 -13
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +6 -6
- package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
- package/rules/php/docs/fix.md +6 -6
- package/rules/php/docs/index.md +3 -3
- package/rules/php/js/docs/index.md +3 -3
- package/rules/python/docs/fix.md +11 -11
- package/rules/python/docs/index.md +3 -3
- package/rules/python/docs/main.md +10 -10
- package/rules/python/js/docs/index.md +3 -3
- package/rules/python/main.mjs +2 -1
- package/rules/rego/docs/fix.md +5 -5
- package/rules/rego/docs/index.md +3 -3
- package/rules/rego/js/docs/index.md +3 -3
- package/rules/release/docs/index.md +5 -5
- package/rules/release/lib/docs/index.md +4 -4
- package/rules/rust/docs/fix.md +4 -4
- package/rules/rust/docs/index.md +3 -3
- package/rules/rust/docs/main.md +7 -7
- package/rules/rust/js/docs/index.md +3 -3
- package/rules/rust/lib/docs/index.md +2 -2
- package/rules/rust/main.mjs +7 -1
- package/rules/security/docs/fix.md +6 -6
- package/rules/security/docs/index.md +3 -3
- package/rules/security/js/docs/index.md +4 -4
- package/rules/style-lint/docs/fix.md +3 -3
- package/rules/style-lint/docs/index.md +3 -3
- package/rules/style-lint/js/docs/index.md +3 -3
- package/rules/tauri/docs/fix.md +11 -11
- package/rules/tauri/docs/index.md +3 -3
- package/rules/tauri/js/docs/index.md +3 -3
- package/rules/test/docs/fix.md +5 -5
- package/rules/test/docs/index.md +3 -3
- package/rules/test/js/data/stryker_config/docs/index.md +4 -4
- package/rules/test/js/data/vitest_config/docs/index.md +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/text/docs/fix.md +11 -11
- package/rules/text/docs/index.md +3 -3
- package/rules/text/docs/main.md +8 -8
- package/rules/text/js/cspell-fix.mjs +7 -2
- package/rules/text/js/docs/cspell-fix.md +8 -8
- package/rules/text/js/docs/index.md +7 -8
- package/rules/text/js/docs/run-v8r.md +3 -3
- package/rules/text/main.mjs +3 -1
- package/rules/tool-surface/docs/index.md +3 -3
- package/rules/tool-surface/meta.json +6 -1
- package/rules/vue/docs/fix.md +6 -6
- package/rules/vue/docs/index.md +3 -3
- package/rules/vue/js/docs/index.md +2 -2
- package/rules/vue/lib/docs/index.md +2 -2
- package/rules/worktree/docs/fix.md +11 -11
- package/rules/worktree/docs/index.md +3 -3
- package/scripts/coverage-classify/docs/index.md +6 -6
- package/scripts/dispatcher/docs/index.md +2 -2
- package/scripts/docs/index.md +16 -16
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/lib/docs/run-lint.md +7 -7
- package/scripts/lib/docs/run-standard-lint.md +7 -5
- package/scripts/lib/fix/analyze-escalation.mjs +4 -1
- package/scripts/lib/fix/docs/analyze-escalation.md +28 -15
- package/scripts/lib/fix/docs/index.md +10 -10
- package/scripts/lib/fix/docs/orchestrator.md +14 -15
- package/scripts/lib/fix/docs/run-conformance-check.md +4 -3
- package/scripts/lib/fix/docs/run-fix-check.md +3 -3
- package/scripts/lib/fix/docs/t0.md +8 -7
- package/scripts/lib/fix/orchestrator.mjs +26 -3
- package/scripts/lib/fix/t0.mjs +4 -1
- package/scripts/lib/run-lint.mjs +1 -3
- package/scripts/utils/docs/index.md +14 -14
- package/skills/doc-aggregate/js/docs/index.md +3 -3
- package/skills/doc-files/.changes/260612-0002.md +1 -0
- package/skills/doc-files/.changes/260612-0006.md +1 -0
- package/skills/doc-files/.changes/260612-0008.md +1 -0
- package/skills/doc-files/.changes/260612-0012.md +1 -0
- package/skills/doc-files/.changes/260612-0031.md +1 -0
- package/skills/doc-files/.changes/260612-0036.md +1 -0
- package/skills/doc-files/.changes/260612-0114.md +1 -0
- package/skills/start-check/js/docs/index.md +2 -2
- package/skills/taze/js/docs/index.md +2 -2
- package/types/bin/n-cursor.d.ts +1 -1
- /package/rules/{js-lint → js}/coverage/coverage.mjs +0 -0
- /package/rules/{js-lint → js}/docs/main.md +0 -0
- /package/rules/{js-lint → js}/js/check.mjs +0 -0
- /package/rules/{js-lint → js}/js/data/tooling/knip-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/data/tooling/oxlint-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/docs/lint-findings.md +0 -0
- /package/rules/{js-lint → js}/js/docs/tooling.md +0 -0
- /package/rules/{js-lint → js}/js/docs/utils_imports.md +0 -0
- /package/rules/{js-lint → js}/js/lint-findings.mjs +0 -0
- /package/rules/{js-lint → js}/js/tooling.mjs +0 -0
- /package/rules/{js-lint → js}/js/utils_imports.mjs +0 -0
- /package/rules/{js-lint/js-lint.mdc → js/js.mdc} +0 -0
- /package/rules/{js-lint → js}/main.mjs +0 -0
- /package/rules/{js-lint → js}/meta.json +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/jscpd.rego +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/target.json +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/template/.jscpd.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/lint_js_yml.rego +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/target.json +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/template/lint-js.yml.snippet.yml +0 -0
- /package/rules/{js-lint → js}/policy/package_json/package_json.rego +0 -0
- /package/rules/{js-lint → js}/policy/package_json/target.json +0 -0
- /package/rules/{js-lint → js}/policy/package_json/template/package.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/target.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/vscode_extensions.rego +0 -0
|
@@ -64,8 +64,16 @@ function judgeCached(src, doc) {
|
|
|
64
64
|
const hit = cacheGet(key)
|
|
65
65
|
if (hit) return { ...hit, cached: true }
|
|
66
66
|
const user = `SOURCE FILE:\n\`\`\`\n${src.slice(0, 12000)}\n\`\`\`\n\nGENERATED DOC:\n\`\`\`md\n${doc.slice(0, 8000)}\n\`\`\`\n\nReturn the JSON verdict.`
|
|
67
|
-
const raw = callLlm(
|
|
68
|
-
|
|
67
|
+
const raw = callLlm(
|
|
68
|
+
[
|
|
69
|
+
{ role: 'system', content: SYSTEM },
|
|
70
|
+
{ role: 'user', content: user }
|
|
71
|
+
],
|
|
72
|
+
JUDGE_MODEL,
|
|
73
|
+
{ timeoutMs: JUDGE_TIMEOUT, temperature: 0 }
|
|
74
|
+
)
|
|
75
|
+
const a = raw.indexOf('{'),
|
|
76
|
+
b = raw.lastIndexOf('}')
|
|
69
77
|
if (a === -1 || b === -1) throw new Error('no JSON in judge reply: ' + raw.slice(0, 160))
|
|
70
78
|
const v = JSON.parse(raw.slice(a, b + 1))
|
|
71
79
|
cacheSet(key, v)
|
|
@@ -81,17 +89,34 @@ function main() {
|
|
|
81
89
|
console.error('Usage: node docgen-judge-measure.mjs <file1> <file2> ...')
|
|
82
90
|
process.exit(2)
|
|
83
91
|
}
|
|
84
|
-
console.error(
|
|
92
|
+
console.error(
|
|
93
|
+
`[measure] gen=${GEN_MODEL} judge=${JUDGE_MODEL} threshold=${THRESHOLD} files=${files.length} cache=${CACHE_DIR}`
|
|
94
|
+
)
|
|
85
95
|
|
|
86
96
|
const rows = []
|
|
87
97
|
for (const [i, file] of files.entries()) {
|
|
88
98
|
const tag = `(${i + 1}/${files.length}) ${file}`
|
|
89
99
|
let src
|
|
90
|
-
try {
|
|
100
|
+
try {
|
|
101
|
+
src = readFileSync(file, 'utf8')
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(`[skip] ${tag}: read ${error.message}`)
|
|
104
|
+
continue
|
|
105
|
+
}
|
|
91
106
|
|
|
92
107
|
let gen
|
|
93
|
-
try {
|
|
94
|
-
|
|
108
|
+
try {
|
|
109
|
+
gen = genCached(file, src)
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error(`[gen-err] ${tag}: ${error.message.slice(0, 120)}`)
|
|
112
|
+
rows.push({ file, error: 'gen', detail: error.message.slice(0, 200) })
|
|
113
|
+
continue
|
|
114
|
+
}
|
|
115
|
+
if (gen.score === null) {
|
|
116
|
+
console.error(`[unsupported] ${tag}`)
|
|
117
|
+
rows.push({ file, score: null, unsupported: true })
|
|
118
|
+
continue
|
|
119
|
+
}
|
|
95
120
|
|
|
96
121
|
const passed = gen.score >= THRESHOLD
|
|
97
122
|
const row = { file, score: gen.score, degraded: gen.degraded, passed, genCached: gen.cached }
|
|
@@ -100,9 +125,18 @@ function main() {
|
|
|
100
125
|
if (passed) {
|
|
101
126
|
try {
|
|
102
127
|
const v = judgeCached(src, gen.md)
|
|
103
|
-
row.verdict = v.verdict
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
row.verdict = v.verdict
|
|
129
|
+
row.confidence = v.confidence
|
|
130
|
+
row.reason = v.reason
|
|
131
|
+
row.offending = v.offending
|
|
132
|
+
row.judgeCached = v.cached
|
|
133
|
+
console.error(
|
|
134
|
+
` [judge${v.cached ? '*' : ''}] ${v.verdict} (${v.confidence}) — ${(v.reason || '').slice(0, 90)}`
|
|
135
|
+
)
|
|
136
|
+
} catch (error) {
|
|
137
|
+
row.judgeError = error.message.slice(0, 200)
|
|
138
|
+
console.error(` [judge-err] ${error.message.slice(0, 120)}`)
|
|
139
|
+
}
|
|
106
140
|
}
|
|
107
141
|
rows.push(row)
|
|
108
142
|
}
|
|
@@ -119,17 +153,26 @@ function main() {
|
|
|
119
153
|
const report = {
|
|
120
154
|
config: { genModel: GEN_MODEL, judgeModel: JUDGE_MODEL, threshold: THRESHOLD },
|
|
121
155
|
counts: {
|
|
122
|
-
files: files.length,
|
|
156
|
+
files: files.length,
|
|
157
|
+
generated: scored.length,
|
|
123
158
|
unsupported: rows.filter(r => r.unsupported).length,
|
|
124
159
|
genErrors: rows.filter(r => r.error === 'gen').length,
|
|
125
160
|
passedDetScorer: scored.filter(r => r.passed).length,
|
|
126
|
-
judged: M,
|
|
161
|
+
judged: M,
|
|
162
|
+
judgeErrors: rows.filter(r => r.judgeError).length
|
|
127
163
|
},
|
|
128
|
-
falsePositiveRate: {
|
|
129
|
-
|
|
130
|
-
|
|
164
|
+
falsePositiveRate: {
|
|
165
|
+
// серед PASSED+judged
|
|
166
|
+
accurate: byVerdict.accurate,
|
|
167
|
+
generic: byVerdict.generic,
|
|
168
|
+
inaccurate: byVerdict.inaccurate,
|
|
169
|
+
badPct: pct(bad),
|
|
170
|
+
inaccuratePct: pct(byVerdict.inaccurate),
|
|
171
|
+
genericPct: pct(byVerdict.generic)
|
|
131
172
|
},
|
|
132
|
-
offenders: passedRows
|
|
173
|
+
offenders: passedRows
|
|
174
|
+
.filter(r => r.verdict !== 'accurate')
|
|
175
|
+
.map(r => ({ file: r.file, score: r.score, verdict: r.verdict, confidence: r.confidence, reason: r.reason })),
|
|
133
176
|
rows
|
|
134
177
|
}
|
|
135
178
|
|
|
@@ -138,10 +181,16 @@ function main() {
|
|
|
138
181
|
writeFileSync(out, JSON.stringify(report, null, 2))
|
|
139
182
|
|
|
140
183
|
console.log('\n===== Q4 MEASUREMENT =====')
|
|
141
|
-
console.log(
|
|
184
|
+
console.log(
|
|
185
|
+
`generated: ${report.counts.generated}/${files.length} (unsupported=${report.counts.unsupported}, gen-errors=${report.counts.genErrors})`
|
|
186
|
+
)
|
|
142
187
|
console.log(`passed det-scorer (score≥${THRESHOLD}): ${report.counts.passedDetScorer} judged: ${M}`)
|
|
143
|
-
console.log(
|
|
144
|
-
|
|
188
|
+
console.log(
|
|
189
|
+
`among PASSED+judged → accurate=${byVerdict.accurate} generic=${byVerdict.generic} inaccurate=${byVerdict.inaccurate}`
|
|
190
|
+
)
|
|
191
|
+
console.log(
|
|
192
|
+
`>>> det-scorer FALSE-POSITIVE rate: ${pct(bad)}% (inaccurate=${pct(byVerdict.inaccurate)}%, generic=${pct(byVerdict.generic)}%)`
|
|
193
|
+
)
|
|
145
194
|
console.log(`decision guide: <~5% → don't build gate; >~15% → build (inaccurate-only)`)
|
|
146
195
|
console.log(`report: ${out}`)
|
|
147
196
|
}
|
|
@@ -58,7 +58,14 @@ export function parseDocVerdict(rawText) {
|
|
|
58
58
|
*/
|
|
59
59
|
export function judgeDoc(src, doc, { model = JUDGE_MODEL, timeoutMs = 120_000 } = {}) {
|
|
60
60
|
const user = `SOURCE FILE:\n\`\`\`\n${src.slice(0, 12_000)}\n\`\`\`\n\nGENERATED DOC:\n\`\`\`md\n${doc.slice(0, 8000)}\n\`\`\`\n\nReturn the JSON verdict.`
|
|
61
|
-
const raw = callLlm(
|
|
61
|
+
const raw = callLlm(
|
|
62
|
+
[
|
|
63
|
+
{ role: 'system', content: JUDGE_SYSTEM },
|
|
64
|
+
{ role: 'user', content: user }
|
|
65
|
+
],
|
|
66
|
+
model,
|
|
67
|
+
{ timeoutMs, temperature: 0 }
|
|
68
|
+
)
|
|
62
69
|
return parseDocVerdict(raw)
|
|
63
70
|
}
|
|
64
71
|
|
|
@@ -115,9 +115,11 @@ export function scanOrphanedDocs(root) {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* Обходить дерево, шукаючи docs/-директорії для orphan-перевірки.
|
|
119
120
|
* docs/ — входимо завжди (батьківська пройшла ignore-перевірку);
|
|
120
|
-
* інші — перевіряємо через isDocgenIgnored.
|
|
121
|
+
* інші — перевіряємо через isDocgenIgnored.
|
|
122
|
+
*/
|
|
121
123
|
function walk(dir) {
|
|
122
124
|
let entries
|
|
123
125
|
try {
|
|
@@ -160,7 +162,12 @@ function gitIgnoredPaths(root, relPaths) {
|
|
|
160
162
|
encoding: 'utf8',
|
|
161
163
|
stdio: ['pipe', 'pipe', 'ignore'] // git пише «not a git repository» у stderr — глушимо
|
|
162
164
|
})
|
|
163
|
-
return new Set(
|
|
165
|
+
return new Set(
|
|
166
|
+
out
|
|
167
|
+
.split('\n')
|
|
168
|
+
.map(s => s.trim())
|
|
169
|
+
.filter(Boolean)
|
|
170
|
+
)
|
|
164
171
|
} catch {
|
|
165
172
|
// exit 1 (жоден не ігнорується) і 128 (не git-репо) → execFileSync кидає; обидва = «не фільтруємо».
|
|
166
173
|
return new Set()
|
|
@@ -201,7 +208,10 @@ export function scanForDocFiles(root) {
|
|
|
201
208
|
}
|
|
202
209
|
|
|
203
210
|
walk(root)
|
|
204
|
-
const ignored = gitIgnoredPaths(
|
|
211
|
+
const ignored = gitIgnoredPaths(
|
|
212
|
+
root,
|
|
213
|
+
results.map(r => r.sourcePath)
|
|
214
|
+
)
|
|
205
215
|
return ignored.size ? results.filter(r => !ignored.has(r.sourcePath)) : results
|
|
206
216
|
}
|
|
207
217
|
|
|
@@ -3,28 +3,39 @@ type: JS Module
|
|
|
3
3
|
title: docgen-crc.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-crc.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 0c277bb7
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль забезпечує роботу з метаданими та оцінкою якості документів. Він дозволяє парсити метадані з Markdown-файлів за допомогою `parseDocFrontmatter`, створювати та заповнювати блоки метаданих за допомогою `buildDocFrontmatter`. Документи можуть бути промарковані за допомогою `stampDoc`. Якість документа оцінюється за допомогою `readDocQuality`, а його актуальність визначається функцією `staleness`, яка використовує `crc32` для перевірки хеш-суми. Модель документа зчитується через `readDocModel`.
|
|
10
14
|
|
|
11
15
|
## Поведінка
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
QUALITY_THRESHOLD визначає поріг якості, нижче якого дока вважається неякісним.
|
|
18
|
+
crc32 обчислює CRC32 вмісту в hex-форматі.
|
|
19
|
+
parseDocFrontmatter парсить YAML-блок у вмісті md-файлу, виділяючи метадані та тіло.
|
|
20
|
+
buildDocFrontmatter створює OKF-сумісний YAML-блок для доки, включаючи метадані.
|
|
21
|
+
stampDoc замінює або додає свіжий YAML-блок у тіло md-доку, використовуючи дані джерела та оцінку.
|
|
22
|
+
readDocCrc зчитує CRC32 з YAML-блоку md-доки за заданим абсолютним шляхом.
|
|
23
|
+
readDocQuality зчитує оцінку якості (score, issues, retried, judgeModel) з YAML-блоку md-доки за абсолютним шляхом.
|
|
24
|
+
readDocModel зчитує повний ID моделі-генератора з YAML-блоку md-доки за абсолютним шляхом.
|
|
25
|
+
staleness визначає, чи є дока застарілою, порівнюючи CRC джерела з CRC у доці за абсолютними шляхами.
|
|
17
26
|
|
|
18
27
|
## Публічний API
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
QUALITY_THRESHOLD — Визначає рівень якості документа: дока з низьким показником вважається неякісним.
|
|
30
|
+
crc32 — Генерує 32-бітний контрольний сума вмісту у шістнадцятковому форматі.
|
|
31
|
+
parseDocFrontmatter — Витягує метадані з початку документа. Якщо метаданих немає, повертає порожні дані.
|
|
32
|
+
buildDocFrontmatter — Створює блок метаданих, сумісний з OKF, включаючи дані про генерацію документа (CRC, модель, якість).
|
|
33
|
+
stampDoc — Додає метадані до документа, що фіксують його стан.
|
|
34
|
+
readDocCrc — Зчитує контрольний сума з метаданих документа.
|
|
35
|
+
readDocQuality — Зчитує рівень якості, збережений у метаданих документа.
|
|
36
|
+
readDocModel — Зчитує назву моделі, використаної для генерації документа.
|
|
37
|
+
staleness — Визначає, чи є документ актуальним, порівнюючи його з джерелом.
|
|
25
38
|
|
|
26
39
|
## Гарантії поведінки
|
|
27
40
|
|
|
28
|
-
-
|
|
29
|
-
- Frontmatter — єдиний машинний виняток із правила «чистий Markdown»; тіло доки модуль не редагує.
|
|
30
|
-
- Відсутні поля якості читаються як «не оцінено» (`score: null`), а не як нуль.
|
|
41
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,31 +3,33 @@ type: JS Module
|
|
|
3
3
|
title: docgen-extract.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-extract.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 369662fe
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль витягує структурований факт-лист з вмісту файлів, звертаючись до мережі. Функція `extractFacts` аналізує вміст файлів, визначаючи публічні експорти, локальні символи та поведінкові маркери для Rust та JavaScript/TypeScript файлів. При цьому ігноруються системні та залежності, включаючи каталоги `.github`, `.git`, `node_modules`, `base/`, `ua/` та `.firebase`. Результати аналізу кешуються протягом одного прогону.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
17
|
1. Витягує факт-лист з вмісту файлу.
|
|
16
18
|
2. Визначає мову файлу за розширенням.
|
|
17
19
|
3. Якщо мова — Rust, виконує аналіз Rust-коду:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
а. Витягує модульний заголовок (`//!`).
|
|
21
|
+
б. Визначає публічні експорти (структури, функції, класи), виходячи з префіксів `pub` та атрибутів експозиції.
|
|
22
|
+
в. Визначає локальні (приватні) символи, які не є публічними.
|
|
23
|
+
г. Класифікує імпорти (`use`) як стандартні, зовнішні чи внутрішні.
|
|
24
|
+
д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи обробляє помилки).
|
|
23
25
|
4. Якщо мова — JavaScript/TypeScript/MJS, виконує аналіз JS-коду:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
5.
|
|
30
|
-
6. Повертає структуру фактів, що містить
|
|
26
|
+
а. Витягує заголовок файлу.
|
|
27
|
+
б. Визначає публічні експорти з їхнім JSDoc.
|
|
28
|
+
в. Класифікує імпорти як стандартні, npm або внутрішні.
|
|
29
|
+
г. Визначає локальні символи (службові функції).
|
|
30
|
+
д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи звертається до мережі).
|
|
31
|
+
5. Усі аналізи свідомо ігнорують шляхи: `.github`, `.git`, `node_modules`, `base/`, `ua/`, `.firebase`.
|
|
32
|
+
6. Повертає структуру фактів, що містить інформацію про файл.
|
|
31
33
|
|
|
32
34
|
## Публічний API
|
|
33
35
|
|
|
@@ -3,30 +3,30 @@ type: JS Module
|
|
|
3
3
|
title: docgen-files-batch.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-files-batch.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 6316eecb
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## Огляд
|
|
12
12
|
|
|
13
|
-
Модуль керує життєвим циклом документації. Він вибирає
|
|
13
|
+
Модуль керує життєвим циклом документації. Він вибирає цілі для оновлення за допомогою `selectTargets`, очищає від неіснуючих джерел за допомогою `purgeOrphanedDocs`, запускає генерацію файлів через `runDocFilesGenCli` та `runDocFilesStampCli`, а також виконує пакетну генерацію за допомогою `runGenerationBatch`. Усі операції виконуються з механізмом перехоплення помилок, що запобігає виникненню винятків назовні.
|
|
14
14
|
|
|
15
15
|
## Поведінка
|
|
16
16
|
|
|
17
|
-
selectTargets
|
|
18
|
-
purgeOrphanedDocs видаляє
|
|
19
|
-
runDocFilesGenCli
|
|
20
|
-
runGenerationBatch виконує
|
|
21
|
-
runDocFilesStampCli детерміновано оновлює метадані (frontmatter) існуючих
|
|
17
|
+
selectTargets відфільтровує документи для генерації, вибираючи застарілі або ті, які мають низьку якість і не були спробовані раніше.
|
|
18
|
+
purgeOrphanedDocs видаляє документи, для яких не існує відповідного джерела, і оновлює індекси директорій.
|
|
19
|
+
runDocFilesGenCli запускає генерацію документації для застарілих або низькоякісних файлів, після попереднього очищення сирітських документів.
|
|
20
|
+
runGenerationBatch виконує послідовну генерацію документації для заданого набору цілей, керуючи процесом через механізм виходу з ладу.
|
|
21
|
+
runDocFilesStampCli детерміновано оновлює метадані (frontmatter) існуючих документів, додаючи CRC та зберігаючи дані про якість.
|
|
22
22
|
|
|
23
23
|
## Публічний API
|
|
24
24
|
|
|
25
|
-
selectTargets — Визначає цілі для
|
|
26
|
-
purgeOrphanedDocs — Видаляє документи, для яких відсутній вихідний файл, та
|
|
25
|
+
selectTargets — Визначає цілі для генерації документації: застарілі або деградовані документи, або всі документи при використанні прапора перезапису.
|
|
26
|
+
purgeOrphanedDocs — Видаляє документи, для яких відсутній відповідний вихідний файл, та оновлює файл індексу.
|
|
27
27
|
runDocFilesGenCli — Генерує документацію для застарілих або відсутніх документів.
|
|
28
|
-
runGenerationBatch — Виконує
|
|
29
|
-
runDocFilesStampCli — Додає або оновлює метадані
|
|
28
|
+
runGenerationBatch — Виконує повний цикл генерації: перевіряє стан локального бекенду, послідовно генерує документи з обробкою збоїв, та створює фінальний звіт.
|
|
29
|
+
runDocFilesStampCli — Додає або оновлює метадані джерела та контрольної суми до існуючих документів без використання великих мовних моделей.
|
|
30
30
|
|
|
31
31
|
## Гарантії поведінки
|
|
32
32
|
|
|
@@ -3,42 +3,31 @@ type: JS Module
|
|
|
3
3
|
title: docgen-gen.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-gen.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 059d7d6e
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
Огляд
|
|
11
|
-
Публічні функції виконують операції з текстом та оцінками. Вони включають виділення коду, вставлення інформації та генерацію документів на основі визначених параметрів.
|
|
11
|
+
## Огляд
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
splitProtected
|
|
16
|
-
Вибирає та видаляє код-фенс-обгортку з секції
|
|
17
|
-
|
|
18
|
-
insertProtected
|
|
19
|
-
Вставляє захищений блок Призначення після заголовка Огляд
|
|
13
|
+
Модуль забезпечує повний цикл роботи з документами: відокремлює захищений блок за допомогою `splitProtected`, вставляє його у визначене місце за допомогою `insertProtected`, генерує повний Markdown-документ через `generateDoc` (з використанням `DEFAULT_LOCAL_MODEL`), а також оцінює якість документа за допомогою `scoreDoc`. Кешування застосовується протягом прогону. (abie.mdc)
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
Перевіряє вихід проти фактів і повертає оцінку та список проблем
|
|
23
|
-
|
|
24
|
-
DEFAULT_LOCAL_MODEL
|
|
25
|
-
Повертає дефолтну модель для роботи
|
|
15
|
+
## Поведінка
|
|
26
16
|
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
splitProtected відокремлює захищений блок Призначення від основного документа.
|
|
18
|
+
insertProtected вставляє захищений блок Призначення у фіксовану позицію після заголовка документа.
|
|
19
|
+
scoreDoc оцінює якість згенерованого документа за заданими критеріями.
|
|
20
|
+
DEFAULT_LOCAL_MODEL визначає модель, яка використовується для генерації документа.
|
|
21
|
+
generateDoc генерує повний Markdown-документ з опису файлу, застосовуючи оцінку та можливий ретрай.
|
|
29
22
|
|
|
30
23
|
## Публічний API
|
|
31
24
|
|
|
32
|
-
splitProtected —
|
|
33
|
-
insertProtected —
|
|
34
|
-
scoreDoc — Stage 2.5
|
|
35
|
-
DEFAULT_LOCAL_MODEL —
|
|
36
|
-
generateDoc —
|
|
25
|
+
splitProtected — Розділяє захищений розділ `## Призначення` (Варіант B), використовуючи наступний заголовок рівня H2 або H3 як межу.
|
|
26
|
+
insertProtected — Розміщує захищений блок `## Призначення` безпосередньо після основного заголовка (H1).
|
|
27
|
+
scoreDoc — Виконує детерміновану оцінку (Stage 2.5), порівнюючи вихідні дані з фактичною інформацією.
|
|
28
|
+
DEFAULT_LOCAL_MODEL — Визначає модель для генерації документа, використовуючи мінімальну локальну модель. Якщо модель не задана, процес зупиняється з помилкою.
|
|
29
|
+
generateDoc — Основна функція, яка перетворює вхідний файл у Markdown-документ з оцінкою достовірності.
|
|
37
30
|
|
|
38
31
|
## Гарантії поведінки
|
|
39
32
|
|
|
40
|
-
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
41
|
-
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
42
|
-
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
43
33
|
- Кешує результати в межах одного прогону.
|
|
44
|
-
- Не звертається до мережі.
|
|
@@ -3,26 +3,28 @@ type: JS Module
|
|
|
3
3
|
title: docgen-judge-measure.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-judge-measure.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 86b3120f
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Файл аналізує надані файли коду, створюючи документацію та оцінюючи її якість відповідно до конфігурації, що міститься у report.json. Процес збирає результати для кожного файлу, використовуючи кешування у межах прогону на основі вмісту джерела та вже згенерованої документації. У кінці процес агрегує дані та зберігає повний звіт у report.json, а також виводить його у консоль.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
|
-
1. Зчитує список файлів для аналізу з командного рядка.
|
|
17
|
+
1. Зчитує список файлів для аналізу з аргументів командного рядка.
|
|
16
18
|
2. Для кожного файлу зчитує його вміст.
|
|
17
|
-
3. Генерує документацію для файлу, використовуючи
|
|
18
|
-
4. Якщо генерація документації
|
|
19
|
-
5. Якщо
|
|
20
|
-
6.
|
|
21
|
-
7.
|
|
22
|
-
8.
|
|
23
|
-
9.
|
|
24
|
-
10.
|
|
25
|
-
11.
|
|
19
|
+
3. Генерує документацію для файлу, використовуючи кешування за вмістом джерела.
|
|
20
|
+
4. Якщо генерація документації успішна і отриманий бал перевищує встановлений поріг, переходить до етапу оцінки.
|
|
21
|
+
5. Якщо бал не перевищує порогу, файл вважається "degraded" (зниженою якістю) і не підлягає подальшій оцінці.
|
|
22
|
+
6. Якщо бал перевищує поріг, документація передається для оцінки потужній моделі, використовуючи кешування за вмістом джерела та згенерованою документацією.
|
|
23
|
+
7. Оцінка повертає вердикт ("accurate", "generic" або "inaccurate"), впевненість та причину.
|
|
24
|
+
8. Збираються результати для кожного файлу.
|
|
25
|
+
9. Після обробки всіх файлів агрегуються результати: підраховуються загальні показники (кількість файлів, помилки генерації, кількість пройшлих тестів, розподіл вердиктів).
|
|
26
|
+
10. Зберігається звіт у файл `report.json` у каталозі кешу.
|
|
27
|
+
11. Виводиться консольний звіт про результати вимірювання.
|
|
26
28
|
|
|
27
29
|
## Гарантії поведінки
|
|
28
30
|
|
|
@@ -3,30 +3,32 @@ type: JS Module
|
|
|
3
3
|
title: docgen-judge.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-judge.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: fcbf72fa
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль реалізує механізм оцінки якості документації. Він визначає модель для оцінки за допомогою `JUDGE_MODEL`, перевіряє статус активності гейту через `JUDGE_ENABLED` та встановлює поріг впевненості за допомогою `JUDGE_CONFIDENCE`. Модуль отримує, парсить та визначає фінальний статус документації, викликаючи `judgeDoc` для отримання висновків, а також може використовувати `judgeFailsDoc` для визначення провалу.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
17
|
JUDGE_MODEL — Вказує модель, яку використовує суддя для оцінки документації.
|
|
16
|
-
JUDGE_ENABLED — Позначає, чи
|
|
17
|
-
JUDGE_CONFIDENCE — Визначає
|
|
18
|
-
parseDocVerdict — Витягує та валідує об'єкт
|
|
19
|
-
judgeDoc —
|
|
18
|
+
JUDGE_ENABLED — Позначає, чи активний семантичний гейт судді.
|
|
19
|
+
JUDGE_CONFIDENCE — Визначає мінімальну впевненість, необхідну для позначення документації як деградованої.
|
|
20
|
+
parseDocVerdict — Витягує та валідує об'єкт оцінки з сирого текстового виводу судді.
|
|
21
|
+
judgeDoc — Зіставляє вміст вихідного файлу та згенеровану документацію, щоб отримати оцінку від судді.
|
|
20
22
|
judgeFailsDoc — Визначає, чи слід вважати документацію деградованою на основі оцінки судді.
|
|
21
23
|
|
|
22
24
|
## Публічний API
|
|
23
25
|
|
|
24
26
|
JUDGE_MODEL — Визначає модель-суддю як `N_CLOUD_MIN_MODEL` (хмарний мінімальний рівень).
|
|
25
|
-
JUDGE_ENABLED — Автоматично вмикає механізм
|
|
26
|
-
JUDGE_CONFIDENCE — Встановлює мінімальний рівень
|
|
27
|
-
parseDocVerdict — Витягує та перевіряє
|
|
28
|
-
judgeDoc — Оцінює згенерований документ потужною
|
|
29
|
-
judgeFailsDoc — Визначає, чи повинен документ бути позначений як
|
|
27
|
+
JUDGE_ENABLED — Автоматично вмикає механізм суддівства, якщо обрано `N_CLOUD_MIN_MODEL`.
|
|
28
|
+
JUDGE_CONFIDENCE — Встановлює мінімальний рівень впевненості для позначення документа як погіршеного (degraded) через неточність.
|
|
29
|
+
parseDocVerdict — Витягує та перевіряє JSON-вердикт із відповіді великої мовної моделі.
|
|
30
|
+
judgeDoc — Оцінює згенерований документ потужною моделлю порівняно з оригінальним джерелом.
|
|
31
|
+
judgeFailsDoc — Визначає, чи повинен документ бути позначений як погіршений, якщо вердикт є `inaccurate` і впевненість достатня.
|
|
30
32
|
|
|
31
33
|
## Гарантії поведінки
|
|
32
34
|
|
|
@@ -3,47 +3,48 @@ type: JS Module
|
|
|
3
3
|
title: docgen-scan.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-scan.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 563b7722
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## Огляд
|
|
12
12
|
|
|
13
|
-
Модуль
|
|
13
|
+
Модуль визначає, які файли є кодовим джерелом за допомогою `isSourceFile`. Він обчислює відповідні шляхи до Markdown-документів для коду за допомогою `docPathForSource`. Модуль ідентифікує потенційні кандидати для документування за допомогою `isDocCandidate` та надає опис файлу за допомогою `describeFile`. Для аналізу файлової системи використовуються `scanOrphanedDocs` для пошуку "сирітських" документів та `scanForDocFiles` для сканування файлів. Модуль також може визначати кореневий каталог за допомогою `resolveRoot` та виконувати сканування файлів документації через `runDocFilesScanCli` або перевірку через `runDocFilesCheckCli`.
|
|
14
14
|
|
|
15
15
|
## Поведінка
|
|
16
16
|
|
|
17
17
|
isSourceFile визначає, чи є ім'я файлу кодовим джерелом для документування.
|
|
18
|
-
docPathForSource обчислює шлях до відповідного
|
|
19
|
-
isDocCandidate визначає, чи
|
|
20
|
-
describeFile описує кодовий файл, надаючи
|
|
21
|
-
scanOrphanedDocs знаходить
|
|
22
|
-
scanForDocFiles рекурсивно
|
|
23
|
-
resolveRoot
|
|
18
|
+
docPathForSource обчислює шлях до відповідного md-документа для заданого кодового файлу.
|
|
19
|
+
isDocCandidate визначає, чи є файл кандидатом на документування, враховуючи розширення, статус тесту та ігнорування.
|
|
20
|
+
describeFile описує кодовий файл, надаючи шлях джерела, шлях доки та стан застарілості.
|
|
21
|
+
scanOrphanedDocs знаходить md-документи, які посилаються на джерела, що більше не існують.
|
|
22
|
+
scanForDocFiles рекурсивно сканує дерево і повертає список кодових файлів зі станом застарілості, відфільтрований за ігноруванням Git.
|
|
23
|
+
resolveRoot визначає абсолютний корінь обходу, використовуючи аргументи або поточний робочий каталог.
|
|
24
24
|
runDocFilesScanCli сканує дерево і друкує JSON-масив усіх кодових файлів зі станом застарілості.
|
|
25
|
-
runDocFilesCheckCli виконує перевірку застарілості,
|
|
25
|
+
runDocFilesCheckCli виконує перевірку застарілості, що може бути використана для хуків, Git-гейтів або ручного переліку шляхів.
|
|
26
26
|
|
|
27
27
|
## Публічний API
|
|
28
28
|
|
|
29
|
-
isSourceFile — визначає, чи є файл
|
|
30
|
-
docPathForSource — визначає шлях до
|
|
31
|
-
isDocCandidate — вирішує, чи повинен кодовий файл бути
|
|
32
|
-
describeFile — надає опис кодового файлу, включаючи його
|
|
33
|
-
scanOrphanedDocs —
|
|
34
|
-
scanForDocFiles — рекурсивно
|
|
35
|
-
resolveRoot — встановлює кореневу директорію для сканування, використовуючи аргумент командного рядка або поточну
|
|
36
|
-
runDocFilesScanCli — сканує дерево та виводить JSON-масив усіх кодових файлів зі статусом
|
|
37
|
-
runDocFilesCheckCli — виконує перевірку застарілості для
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
29
|
+
isSourceFile — визначає, чи є файл вихідним кодом для створення документації.
|
|
30
|
+
docPathForSource — визначає шлях до файлу документації, розміщений у теці `docs/` відносно коду.
|
|
31
|
+
isDocCandidate — вирішує, чи повинен кодовий файл бути документований (правильне розширення, не тест, не ігнорується, не системний).
|
|
32
|
+
describeFile — надає опис кодового файлу, включаючи його шлях та статус застарілості.
|
|
33
|
+
scanOrphanedDocs — знаходить файли документації, які посилаються на вихідний код, що більше не існує.
|
|
34
|
+
scanForDocFiles — рекурсивно шукає всі кодові файли у заданому дереві та визначає їхній статус застарілості.
|
|
35
|
+
resolveRoot — встановлює кореневу директорію для сканування, використовуючи аргумент командного рядка або поточну директорію.
|
|
36
|
+
runDocFilesScanCli — сканує дерево та виводить JSON-масив усіх кодових файлів зі статусом застарілості.
|
|
37
|
+
runDocFilesCheckCli — виконує перевірку застарілості файлів для хуків та командного інтерфейсу.
|
|
38
|
+
|
|
39
|
+
**Режими роботи:**
|
|
40
|
+
`--hook` — перевіряє один файл, отриманий із вхідного JSON, у контексті хука.
|
|
41
|
+
`--git` — порівнює файли у `git diff` та блокує виконання, якщо знайдено застарілі файли, перевищуючи встановлений ліміт.
|
|
42
|
+
`--degraded` — генерує звіт про файли документації, які не відповідають встановленому рівню якості.
|
|
43
|
+
`<paths…>` — обробляє лише вказані явно шляхи-джерела.
|
|
44
|
+
|
|
45
|
+
**Коди виходу:**
|
|
46
|
+
Вихід 2 — вказує на знаходження застарілих файлів (для блокування хука).
|
|
47
|
+
Вихід 0 — вказує на відсутність застарілих файлів або проходження перевірки згідно з лімітом.
|
|
47
48
|
|
|
48
49
|
## Гарантії поведінки
|
|
49
50
|
|