@daniellins/power-claude 0.16.4 → 0.17.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/installer/motor-scripts.json +195 -35
- package/package.json +4 -2
- package/scripts/forge-generate.cjs +39 -8
- package/scripts/forge-harden-learning.cjs +5 -2
- package/scripts/pc-run-pod.cjs +223 -40
- package/scripts/smoke-pod-workflow.cjs +3 -1
- package/scripts/validate-no-clone.cjs +31 -7
- package/template/pods/academy/pod-spec.json +1 -1
- package/template/pods/academy/workflows/wf-materiais-revisao.yaml +1 -1
- package/template/pods/authority-content/pod-spec.json +1 -1
- package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +1 -1
- package/template/pods/automation/pod-spec.json +3 -3
- package/template/pods/automation/specs/wf-langgraph-build.spec.json +3 -3
- package/template/pods/automation/workflows/wf-langgraph-build.yaml +3 -3
- package/template/pods/automation/workflows/wf-n8n-build.yaml +3 -3
- package/template/pods/content-carousel/pod-spec.json +9 -2
- package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +2 -2
- package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +4 -4
- package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +3 -3
- package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +2 -2
- package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +3 -3
- package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +3 -3
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +4 -4
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +3 -3
- package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +2 -2
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +3 -3
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +3 -3
- package/template/pods/squad-forge/agents/forge-chief.md +1 -1
- package/template/pods/squad-forge/pod-spec.json +2 -2
- package/template/pods/squad-forge/tasks/pipeline.md +20 -8
- package/template/pods/squad-forge/templates/register-tmpl.md +5 -0
- package/template/pods/squad-forge/workflows/wf-forge.smoke.json +2 -2
- package/template/pods/squad-forge/workflows/wf-forge.yaml +2 -2
- package/scripts/__fixtures__/anti-path-demo/agents/ap-writer.md +0 -13
- package/scripts/__fixtures__/anti-path-demo/templates/write-tmpl.md +0 -7
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.smoke.json +0 -10
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.yaml +0 -25
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/agents/content-chief.md +0 -1
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/workflows/wf-criacao-redteam.yaml +0 -3
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod-spec.json +0 -13
- package/scripts/__fixtures__/fidelity/fake-green-average-in-band.yaml +0 -21
- package/scripts/__fixtures__/fidelity/fake-green-average.yaml +0 -18
- package/scripts/__fixtures__/fidelity/fake-green-denominator.yaml +0 -19
- package/scripts/__fixtures__/fidelity/fake-green-missing-evidence.yaml +0 -18
- package/scripts/__fixtures__/fidelity/fake-green-threshold.yaml +0 -18
- package/scripts/__fixtures__/fidelity/fake-green-weight.yaml +0 -18
- package/scripts/__fixtures__/fidelity/golden.yaml +0 -31
- package/scripts/__fixtures__/fidelity/trindade-incoherent.yaml +0 -15
- package/scripts/__fixtures__/forge-canonical/pod-spec-example.json +0 -37
- package/scripts/__fixtures__/migrate-squad/authored/agents/offer-engineer.md +0 -17
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/no-source.md +0 -7
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/value-stack-method.md +0 -8
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.smoke.json +0 -24
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.spec.json +0 -45
- package/scripts/__fixtures__/migrate-squad/legacy-squad/HEADLINE.md +0 -3
- package/scripts/__fixtures__/migrate-squad/legacy-squad/README.md +0 -4
- package/scripts/__fixtures__/migrate-squad/legacy-squad/agents/hormozi-offer.md +0 -14
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/dead-redundant.md +0 -4
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/method-guide.md +0 -6
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/veto-screen.md +0 -4
- package/scripts/__fixtures__/migrate-squad/legacy-squad/config/config.yaml +0 -2
- package/scripts/__fixtures__/migrate-squad/legacy-squad/data/case-library.md +0 -3
- package/scripts/__fixtures__/migrate-squad/legacy-squad/scripts/validate-mvn.py +0 -16
- package/scripts/__fixtures__/migrate-squad/legacy-squad/sops/sop-sample.md +0 -3
- package/scripts/__fixtures__/migrate-squad/legacy-squad/squad-io.yaml +0 -14
- package/scripts/__fixtures__/migrate-squad/legacy-squad/tasks/gather-context.md +0 -7
- package/scripts/__fixtures__/migrate-squad/legacy-squad/templates/output-tmpl.md +0 -5
- package/scripts/__fixtures__/migrate-squad/legacy-squad/workflows/wf-sample.yaml +0 -24
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-checkpoint.yaml +0 -21
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-demo.yaml +0 -22
- package/scripts/__fixtures__/pipeline/pods/pipe-a/agents/maker.md +0 -13
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.consolidated.md +0 -8
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.jsonl +0 -83
- package/scripts/__fixtures__/pipeline/pods/pipe-a/templates/make-tmpl.md +0 -8
- package/scripts/__fixtures__/pipeline/pods/pipe-a/workflows/wf-a.yaml +0 -16
- package/scripts/__fixtures__/pipeline/pods/pipe-b/agents/user.md +0 -13
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.consolidated.md +0 -8
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.jsonl +0 -14
- package/scripts/__fixtures__/pipeline/pods/pipe-b/templates/use-tmpl.md +0 -6
- package/scripts/__fixtures__/pipeline/pods/pipe-b/workflows/wf-b.yaml +0 -16
- package/scripts/__fixtures__/pod-run/agents/forge-chief.md +0 -13
- package/scripts/__fixtures__/pod-run/agents/pod-critic.md +0 -13
- package/scripts/__fixtures__/pod-run/templates/build-tmpl.md +0 -8
- package/scripts/__fixtures__/pod-run/templates/gate-tmpl.md +0 -6
- package/scripts/__fixtures__/pod-run/workflows/wf-min.yaml +0 -43
- package/scripts/__fixtures__/pod-run/workflows/wf-skip-modes.yaml +0 -50
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-all-skippable.yaml +0 -30
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-criteria-escalar-de-bloco.yaml +0 -40
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-skip-mode-desconhecido.yaml +0 -30
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-unknown-key.yaml +0 -29
- package/scripts/__fixtures__/pod-workflow/invalid-cycle.yaml +0 -26
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-backedge.yaml +0 -29
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-forward.yaml +0 -29
- package/scripts/__fixtures__/pod-workflow/invalid-handoff-open.yaml +0 -27
- package/scripts/__fixtures__/pod-workflow/invalid-knowledge-shape.yaml +0 -18
- package/scripts/__fixtures__/pod-workflow/invalid-missing-agent.yaml +0 -15
- package/scripts/__fixtures__/pod-workflow/invalid-missing-outputs.yaml +0 -15
- package/scripts/__fixtures__/pod-workflow/invalid-missing-template.yaml +0 -15
- package/scripts/__fixtures__/pod-workflow/invalid-missing-veto.yaml +0 -13
- package/scripts/__fixtures__/pod-workflow/invalid-template-not-on-disk.yaml +0 -16
- package/scripts/__fixtures__/pod-workflow/invalid-veto-prose.yaml +0 -17
- package/scripts/__fixtures__/pod-workflow/knowledge/a.md +0 -4
- package/scripts/__fixtures__/pod-workflow/knowledge/b.md +0 -4
- package/scripts/__fixtures__/pod-workflow/knowledge/c.md +0 -4
- package/scripts/__fixtures__/pod-workflow/templates/step-tmpl.md +0 -7
- package/scripts/__fixtures__/pod-workflow/valid-checkpoint-skip-modes.yaml +0 -29
- package/scripts/__fixtures__/pod-workflow/valid-fix-loop.yaml +0 -30
- package/scripts/__fixtures__/pod-workflow/valid-knowledge.yaml +0 -30
- package/scripts/__fixtures__/pod-workflow/valid-veto-always-true.yaml +0 -20
- package/scripts/__fixtures__/pod-workflow/valid.yaml +0 -27
- package/scripts/__fixtures__/smoke-canary/agents/canary-reporter.md +0 -13
- package/scripts/__fixtures__/smoke-canary/agents/canary-researcher.md +0 -13
- package/scripts/__fixtures__/smoke-canary/agents/canary-synth.md +0 -13
- package/scripts/__fixtures__/smoke-canary/memory/learnings.consolidated.md +0 -10
- package/scripts/__fixtures__/smoke-canary/memory/learnings.jsonl +0 -448
- package/scripts/__fixtures__/smoke-canary/templates/report-tmpl.md +0 -9
- package/scripts/__fixtures__/smoke-canary/templates/research-tmpl.md +0 -7
- package/scripts/__fixtures__/smoke-canary/templates/synth-tmpl.md +0 -9
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.smoke.json +0 -11
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml +0 -53
- package/scripts/__fixtures__/source-audit/fake-green-bronze-unsignaled.yaml +0 -10
- package/scripts/__fixtures__/source-audit/fake-green-counts.yaml +0 -9
- package/scripts/__fixtures__/source-audit/fake-green-missing-evidence.yaml +0 -9
- package/scripts/__fixtures__/source-audit/fake-green-unclassified.yaml +0 -10
- package/scripts/__fixtures__/source-audit/fake-green-verdict.yaml +0 -10
- package/scripts/__fixtures__/source-audit/golden-blocked.yaml +0 -10
- package/scripts/__fixtures__/source-audit/golden.yaml +0 -11
- package/scripts/__fixtures__/sweep-forms/agents/forms-count.md +0 -13
- package/scripts/__fixtures__/sweep-forms/agents/forms-field.md +0 -13
- package/scripts/__fixtures__/sweep-forms/agents/forms-fileref.md +0 -13
- package/scripts/__fixtures__/sweep-forms/agents/forms-json.md +0 -13
- package/scripts/__fixtures__/sweep-forms/agents/forms-section.md +0 -13
- package/scripts/__fixtures__/sweep-forms/specs/wf-forms.spec.json +0 -5
- package/scripts/__fixtures__/sweep-forms/templates/t_count.md +0 -5
- package/scripts/__fixtures__/sweep-forms/templates/t_field.md +0 -3
- package/scripts/__fixtures__/sweep-forms/templates/t_fileref.md +0 -3
- package/scripts/__fixtures__/sweep-forms/templates/t_json.md +0 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_section.md +0 -3
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.smoke.json +0 -13
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.yaml +0 -67
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-1-noop-state-json.fixture.md +0 -18
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-2-crash-buildworkflowyaml.fixture.md +0 -26
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-3-nasce-verde-skip-modes.fixture.md +0 -29
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-4-guarda-sem-irmao.fixture.md +0 -17
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5a-diff-stat-sem-guarda.fixture.md +0 -17
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5b-test-f-sobre-diretorio.fixture.md +0 -20
- package/scripts/__fixtures__/veto-checks/copy-clean.md +0 -4
- package/scripts/__fixtures__/veto-checks/copy-dashes.md +0 -4
- package/scripts/__fixtures__/veto-checks/n8n-bad.md +0 -18
- package/scripts/__fixtures__/veto-checks/n8n-ok.md +0 -22
- package/scripts/__fixtures__/veto-checks/page-bad.html +0 -7
- package/scripts/__fixtures__/veto-checks/phash/copy.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct2.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/make-fixtures.cjs +0 -203
- package/scripts/__fixtures__/veto-checks/phash/ref.png +0 -0
- package/scripts/__fixtures__/veto-checks/slide-ok.html +0 -15
- package/scripts/__fixtures__/veto-checks/slide-overflow.html +0 -14
- package/scripts/__fixtures__/veto-checks/sweep-pod/agents/vc-checker.md +0 -13
- package/scripts/__fixtures__/veto-checks/sweep-pod/templates/check-tmpl.md +0 -6
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.smoke.json +0 -10
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.yaml +0 -19
- package/scripts/__fixtures__/voz-do-dono/README.md +0 -23
- package/scripts/__fixtures__/voz-do-dono/dono-escalar.yaml +0 -9
- package/scripts/__fixtures__/voz-do-dono/dono-guia.yaml +0 -10
- package/scripts/__fixtures__/voz-do-dono/peca-3a-pessoa.md +0 -6
- package/scripts/__fixtures__/voz-do-dono/peca-com-lexico-proibido.md +0 -6
- package/scripts/__fixtures__/voz-do-dono/peca-limpa-1a-pessoa.md +0 -6
- package/scripts/__tests__/derive-ready-transitions.test.cjs +0 -269
- package/scripts/__tests__/enforce-cycle-authority.test.cjs +0 -869
- package/scripts/__tests__/enforce-git-push-authority.test.cjs +0 -988
- package/scripts/__tests__/enforce-ready-oracles.test.cjs +0 -745
- package/scripts/__tests__/motor-scripts.test.cjs +0 -339
- package/scripts/__tests__/pc-run-pod-counter.test.cjs +0 -58
- package/scripts/__tests__/pc-run-pod.test.cjs +0 -578
- package/scripts/__tests__/validate-pod-workflow.test.cjs +0 -90
- package/scripts/__tests__/validate-story-acs.test.cjs +0 -607
- package/scripts/anti-path.test.cjs +0 -163
- package/scripts/arena.test.cjs +0 -213
- package/scripts/brief-leitura-obrigatoria.test.cjs +0 -364
- package/scripts/build-public-tree.cjs +0 -372
- package/scripts/consolidate-knowledge-runner.test.cjs +0 -249
- package/scripts/default-funcional.test.cjs +0 -153
- package/scripts/derive-ready-transitions.cjs +0 -361
- package/scripts/forge-additive.test.cjs +0 -158
- package/scripts/forge-assess-tier.test.cjs +0 -114
- package/scripts/forge-canonical.test.cjs +0 -624
- package/scripts/forge-harden-learning.test.cjs +0 -242
- package/scripts/forge.test.cjs +0 -609
- package/scripts/harden-knowledge.test.cjs +0 -612
- package/scripts/harness-g5-lite.test.cjs +0 -134
- package/scripts/hn-carousel-contrato-entrada.test.cjs +0 -96
- package/scripts/migrate-squad-orchestration.test.cjs +0 -146
- package/scripts/migration-manifest-sf3.2.test.cjs +0 -382
- package/scripts/migration-manifest-sf3.3.test.cjs +0 -170
- package/scripts/migration-manifest-sf5.5.test.cjs +0 -189
- package/scripts/migration-manifest.test.cjs +0 -186
- package/scripts/npm-scope-invocation.test.cjs +0 -194
- package/scripts/owner-layer.cjs +0 -442
- package/scripts/owner-layer.test.cjs +0 -358
- package/scripts/pc-run-pipeline.test.cjs +0 -256
- package/scripts/pc-run-pod-countgte.test.cjs +0 -66
- package/scripts/phash-gate.test.cjs +0 -433
- package/scripts/pod-export-compile.test.cjs +0 -312
- package/scripts/pod-export-executor.test.cjs +0 -1341
- package/scripts/pod-export-hardening.test.cjs +0 -531
- package/scripts/pod-export-postprocess.test.cjs +0 -558
- package/scripts/pod-export-queue-race.test.cjs +0 -865
- package/scripts/pod-export-release.test.cjs +0 -267
- package/scripts/pod-export-service.test.cjs +0 -489
- package/scripts/pod-export-ui.test.cjs +0 -301
- package/scripts/pod-memory-budget.test.cjs +0 -309
- package/scripts/pod-memory-note.test.cjs +0 -452
- package/scripts/pod-memory.test.cjs +0 -951
- package/scripts/render-png.test.cjs +0 -307
- package/scripts/smoke-isolation.test.cjs +0 -100
- package/scripts/smoke-sweep.test.cjs +0 -170
- package/scripts/validate-adopt.js +0 -235
- package/scripts/validate-branding.js +0 -100
- package/scripts/validate-fidelity-output.test.cjs +0 -101
- package/scripts/validate-git-vetor.cjs +0 -99
- package/scripts/validate-install.js +0 -230
- package/scripts/validate-no-clone.test.cjs +0 -77
- package/scripts/validate-source-audit.test.cjs +0 -90
- package/scripts/validate-update-scope-motor.js +0 -421
- package/scripts/veto-checks.test.cjs +0 -219
|
@@ -1,39 +1,199 @@
|
|
|
1
1
|
{
|
|
2
2
|
"scripts": [
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{
|
|
35
|
-
|
|
36
|
-
|
|
3
|
+
{
|
|
4
|
+
"path": "scripts/pc-run-pod.cjs",
|
|
5
|
+
"owner": "skill:pc-run-pod",
|
|
6
|
+
"reason": "referenced"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"path": "scripts/pod-memory.cjs",
|
|
10
|
+
"owner": "skill:pc-run-pod",
|
|
11
|
+
"reason": "referenced"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": "scripts/pod-memory-note.cjs",
|
|
15
|
+
"owner": "skill:pc-run-pod",
|
|
16
|
+
"reason": "referenced",
|
|
17
|
+
"requiredBy": "skill:pc-run-pod"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "scripts/validate-pod-workflow.cjs",
|
|
21
|
+
"owner": "pod:squad-forge",
|
|
22
|
+
"reason": "referenced"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "scripts/smoke-pod-workflow.cjs",
|
|
26
|
+
"owner": "pod:squad-forge",
|
|
27
|
+
"reason": "referenced"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "scripts/harness-g5-lite.cjs",
|
|
31
|
+
"owner": "pod:squad-forge",
|
|
32
|
+
"reason": "referenced"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "scripts/migration-manifest.cjs",
|
|
36
|
+
"owner": "pod:squad-forge",
|
|
37
|
+
"reason": "referenced"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "scripts/watcher-audit.cjs",
|
|
41
|
+
"owner": "pod:squad-forge",
|
|
42
|
+
"reason": "referenced"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "scripts/validate-no-clone.cjs",
|
|
46
|
+
"owner": "pod:squad-forge",
|
|
47
|
+
"reason": "referenced"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "scripts/forge-assess-tier.cjs",
|
|
51
|
+
"owner": "pod:squad-forge",
|
|
52
|
+
"reason": "referenced"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "scripts/validate-fidelity-output.cjs",
|
|
56
|
+
"owner": "squad-forge/mind-extractor",
|
|
57
|
+
"reason": "referenced"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"path": "scripts/validate-source-audit.cjs",
|
|
61
|
+
"owner": "squad-forge/mind-extractor",
|
|
62
|
+
"reason": "referenced"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "scripts/arena.cjs",
|
|
66
|
+
"owner": "skill:pc-arena",
|
|
67
|
+
"reason": "referenced"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "scripts/forge-generate.cjs",
|
|
71
|
+
"owner": "pod:squad-forge",
|
|
72
|
+
"reason": "referenced"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "scripts/forge-ingest-memory.cjs",
|
|
76
|
+
"owner": "pod:squad-forge",
|
|
77
|
+
"reason": "referenced"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "scripts/forge-upgrade-pod.cjs",
|
|
81
|
+
"owner": "pod:squad-forge",
|
|
82
|
+
"reason": "referenced"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "scripts/forge-harden-learning.cjs",
|
|
86
|
+
"owner": "pod:squad-forge",
|
|
87
|
+
"reason": "referenced"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "scripts/validate-budgets.js",
|
|
91
|
+
"owner": "pods:*",
|
|
92
|
+
"reason": "referenced"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"path": "scripts/veto-checks/lexical-check.cjs",
|
|
96
|
+
"owner": "veto:command_check",
|
|
97
|
+
"reason": "referenced",
|
|
98
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "scripts/veto-checks/html-valid.cjs",
|
|
102
|
+
"owner": "veto:command_check",
|
|
103
|
+
"reason": "referenced",
|
|
104
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"path": "scripts/veto-checks/render-gate.cjs",
|
|
108
|
+
"owner": "veto:command_check",
|
|
109
|
+
"reason": "referenced",
|
|
110
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "scripts/veto-checks/phash-gate.cjs",
|
|
114
|
+
"owner": "veto:command_check",
|
|
115
|
+
"reason": "referenced",
|
|
116
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "scripts/veto-checks/render-png.cjs",
|
|
120
|
+
"owner": "veto:command_check",
|
|
121
|
+
"reason": "referenced",
|
|
122
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"path": "scripts/pc-run-pipeline.cjs",
|
|
126
|
+
"owner": "skill:pc-pipeline",
|
|
127
|
+
"reason": "referenced",
|
|
128
|
+
"requiredBy": "skill:pc-pipeline"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"path": "scripts/validate-pipeline.cjs",
|
|
132
|
+
"owner": "skill:pc-pipeline",
|
|
133
|
+
"reason": "require-dependency",
|
|
134
|
+
"requiredBy": "scripts/pc-run-pipeline.cjs"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"path": "scripts/pod-export-compile.cjs",
|
|
138
|
+
"owner": "skill:pc-export",
|
|
139
|
+
"reason": "referenced",
|
|
140
|
+
"requiredBy": "skill:pc-export"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"path": "scripts/pod-export-executor.cjs",
|
|
144
|
+
"owner": "skill:pc-export",
|
|
145
|
+
"reason": "referenced",
|
|
146
|
+
"requiredBy": "skill:pc-export"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"path": "scripts/pod-export-release.cjs",
|
|
150
|
+
"owner": "skill:pc-export",
|
|
151
|
+
"reason": "referenced",
|
|
152
|
+
"requiredBy": "skill:pc-export"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"path": "scripts/pod-export-tools.cjs",
|
|
156
|
+
"owner": "skill:pc-export",
|
|
157
|
+
"reason": "require-dependency",
|
|
158
|
+
"requiredBy": "scripts/pod-export-executor.cjs"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"path": "scripts/pod-export-postprocess.cjs",
|
|
162
|
+
"owner": "skill:pc-export",
|
|
163
|
+
"reason": "require-dependency",
|
|
164
|
+
"requiredBy": "scripts/pod-export-executor.cjs"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"path": "scripts/pod-export-service.cjs",
|
|
168
|
+
"owner": "skill:pc-export",
|
|
169
|
+
"reason": "referenced",
|
|
170
|
+
"requiredBy": "skill:pc-export"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"path": "scripts/pod-export-ui.cjs",
|
|
174
|
+
"owner": "skill:pc-export",
|
|
175
|
+
"reason": "referenced",
|
|
176
|
+
"requiredBy": "skill:pc-export"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"path": "scripts/validate-story-acs.cjs",
|
|
180
|
+
"owner": "skill:pc-validate-story",
|
|
181
|
+
"reason": "referenced"
|
|
182
|
+
}
|
|
37
183
|
],
|
|
38
|
-
"exclude": [
|
|
184
|
+
"exclude": [
|
|
185
|
+
"*.test.cjs",
|
|
186
|
+
"__tests__/",
|
|
187
|
+
"__fixtures__/",
|
|
188
|
+
"validate-install.js",
|
|
189
|
+
"validate-adopt.js",
|
|
190
|
+
"validate-update-scope-motor.js",
|
|
191
|
+
"owner-layer.cjs",
|
|
192
|
+
"derive-ready-transitions.cjs",
|
|
193
|
+
"validate-git-vetor.cjs",
|
|
194
|
+
"validate-branding.js",
|
|
195
|
+
"build-public-tree.cjs",
|
|
196
|
+
"gen-dist-ignore.cjs",
|
|
197
|
+
"validate-spec-coverage.cjs"
|
|
198
|
+
]
|
|
39
199
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daniellins/power-claude",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Lean, budget-gated agent framework for Claude Code — pods by job-to-be-done",
|
|
5
5
|
"author": "Daniel Lins",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
"scripts"
|
|
29
29
|
],
|
|
30
30
|
"scripts": {
|
|
31
|
-
"test": "node scripts/validate-install.js && node scripts/validate-adopt.js && node scripts/validate-update-scope-motor.js && node scripts/__tests__/validate-pod-workflow.test.cjs && node scripts/__tests__/pc-run-pod.test.cjs && node scripts/__tests__/pc-run-pod-counter.test.cjs && node scripts/pc-run-pod-countgte.test.cjs && node scripts/forge.test.cjs && node scripts/forge-assess-tier.test.cjs && node scripts/forge-additive.test.cjs && node scripts/forge-canonical.test.cjs && node scripts/migration-manifest.test.cjs && node scripts/migration-manifest-sf3.2.test.cjs && node scripts/migration-manifest-sf3.3.test.cjs && node scripts/migration-manifest-sf5.5.test.cjs && node scripts/validate-no-clone.test.cjs && node scripts/migrate-squad-orchestration.test.cjs && node scripts/pod-memory.test.cjs && node scripts/pod-memory-budget.test.cjs && node scripts/pod-memory-note.test.cjs && node scripts/forge-harden-learning.test.cjs && node scripts/harden-knowledge.test.cjs && node scripts/consolidate-knowledge-runner.test.cjs && node scripts/smoke-pod-workflow.cjs scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml && node scripts/smoke-sweep.test.cjs && node scripts/smoke-isolation.test.cjs && node scripts/harness-g5-lite.test.cjs && node scripts/__tests__/motor-scripts.test.cjs && node scripts/validate-fidelity-output.test.cjs && node scripts/validate-source-audit.test.cjs && node scripts/arena.test.cjs && node scripts/veto-checks.test.cjs && node scripts/phash-gate.test.cjs && node scripts/render-png.test.cjs && node scripts/hn-carousel-contrato-entrada.test.cjs && node scripts/anti-path.test.cjs && node scripts/brief-leitura-obrigatoria.test.cjs && node scripts/pc-run-pipeline.test.cjs && node scripts/pod-export-compile.test.cjs && node scripts/pod-export-executor.test.cjs && node scripts/pod-export-postprocess.test.cjs && node scripts/pod-export-release.test.cjs && node scripts/pod-export-service.test.cjs && node scripts/pod-export-ui.test.cjs && node scripts/pod-export-hardening.test.cjs && node scripts/pod-export-queue-race.test.cjs && node scripts/npm-scope-invocation.test.cjs && node scripts/default-funcional.test.cjs && node scripts/owner-layer.test.cjs && node scripts/__tests__/enforce-cycle-authority.test.cjs && node scripts/__tests__/enforce-git-push-authority.test.cjs && node scripts/__tests__/validate-story-acs.test.cjs && node scripts/__tests__/enforce-ready-oracles.test.cjs && node scripts/__tests__/derive-ready-transitions.test.cjs && node installer/__tests__/doctor-ready-oracles.test.cjs && node installer/__tests__/merge-settings.test.cjs",
|
|
31
|
+
"test": "node scripts/validate-install.js && node scripts/validate-adopt.js && node scripts/validate-update-scope-motor.js && node scripts/__tests__/validate-pod-workflow.test.cjs && node scripts/__tests__/pc-run-pod.test.cjs && node scripts/__tests__/pc-run-pod-tokens.test.cjs && node scripts/__tests__/pc-run-pod-describe.test.cjs && node scripts/__tests__/pc-run-pod-resolve.test.cjs && node scripts/__tests__/pc-run-pod-render-criteria.test.cjs && node scripts/__tests__/pc-run-pod-apply-production.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-non-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-counter.test.cjs && node scripts/pc-run-pod-countgte.test.cjs && node scripts/forge.test.cjs && node scripts/forge-assess-tier.test.cjs && node scripts/forge-additive.test.cjs && node scripts/forge-canonical.test.cjs && node scripts/__tests__/forge-register-entry-point.test.cjs && node scripts/migration-manifest.test.cjs && node scripts/migration-manifest-sf3.2.test.cjs && node scripts/migration-manifest-sf3.3.test.cjs && node scripts/migration-manifest-sf5.5.test.cjs && node scripts/validate-no-clone.test.cjs && node scripts/migrate-squad-orchestration.test.cjs && node scripts/pod-memory.test.cjs && node scripts/pod-memory-budget.test.cjs && node scripts/pod-memory-note.test.cjs && node scripts/forge-harden-learning.test.cjs && node scripts/harden-knowledge.test.cjs && node scripts/consolidate-knowledge-runner.test.cjs && node scripts/smoke-pod-workflow.cjs scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml && node scripts/smoke-sweep.test.cjs && node scripts/smoke-isolation.test.cjs && node scripts/harness-g5-lite.test.cjs && node scripts/__tests__/motor-scripts.test.cjs && node scripts/validate-fidelity-output.test.cjs && node scripts/validate-source-audit.test.cjs && node scripts/arena.test.cjs && node scripts/veto-checks.test.cjs && node scripts/phash-gate.test.cjs && node scripts/render-png.test.cjs && node scripts/hn-carousel-contrato-entrada.test.cjs && node scripts/anti-path.test.cjs && node scripts/brief-leitura-obrigatoria.test.cjs && node scripts/pc-run-pipeline.test.cjs && node scripts/pod-export-compile.test.cjs && node scripts/pod-export-executor.test.cjs && node scripts/pod-export-postprocess.test.cjs && node scripts/pod-export-release.test.cjs && node scripts/pod-export-service.test.cjs && node scripts/pod-export-ui.test.cjs && node scripts/pod-export-hardening.test.cjs && node scripts/pod-export-queue-race.test.cjs && node scripts/npm-scope-invocation.test.cjs && node scripts/default-funcional.test.cjs && node scripts/owner-layer.test.cjs && node scripts/__tests__/enforce-cycle-authority.test.cjs && node scripts/__tests__/enforce-git-push-authority.test.cjs && node scripts/__tests__/validate-story-acs.test.cjs && node scripts/__tests__/validate-spec-coverage.test.cjs && node scripts/__tests__/spec-wf-criteria-sync.test.cjs && node scripts/__tests__/enforce-ready-oracles.test.cjs && node scripts/__tests__/derive-ready-transitions.test.cjs && node installer/__tests__/doctor-ready-oracles.test.cjs && node installer/__tests__/merge-settings.test.cjs && node scripts/__tests__/dist-tarball-boundary.test.cjs && node scripts/__tests__/build-public-tree-scripts.test.cjs",
|
|
32
|
+
"prepack": "node scripts/gen-dist-ignore.cjs",
|
|
33
|
+
"prepublishOnly": "node scripts/gen-dist-ignore.cjs",
|
|
32
34
|
"validate": "node scripts/validate-budgets.js template/pods template/.claude/agents && node scripts/validate-branding.js && node scripts/validate-no-clone.cjs template && node scripts/validate-git-vetor.cjs"
|
|
33
35
|
}
|
|
34
36
|
}
|
|
@@ -385,6 +385,17 @@ function countGteFields(veto) {
|
|
|
385
385
|
return out;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
+
/**
|
|
389
|
+
* SF19.1 — a etapa declara um veto `file_referenced_exists` sobre o campo `entry_point`?
|
|
390
|
+
* `entry_point` é o nome canônico ÚNICO da referência cross-pod do register do squad-forge
|
|
391
|
+
* (pod-spec.json:147); pods genéricos usam `entregavel` (não alcançado por este predicado).
|
|
392
|
+
* Só dispara em `field === 'entry_point'` — ortogonal ao mecanismo extraFields (Blocos G/H).
|
|
393
|
+
*/
|
|
394
|
+
function hasEntryPointRef(veto) {
|
|
395
|
+
return Array.isArray(veto)
|
|
396
|
+
&& veto.some((a) => a && a.type === 'file_referenced_exists' && a.field === 'entry_point');
|
|
397
|
+
}
|
|
398
|
+
|
|
388
399
|
/**
|
|
389
400
|
* SF12.4a/ADR-030 Blocos G/H (AC20a/AC23a) — campos de máquina extras dos padrões
|
|
390
401
|
* `contrato_entrada`/`entregavel`, quando declarados. Emitidos ANTES de `confianca`
|
|
@@ -408,6 +419,16 @@ function stepTemplate(stepId, agent, output, sections, veto, extraFields) {
|
|
|
408
419
|
const extras = (Array.isArray(extraFields) && extraFields.length)
|
|
409
420
|
? `${extraFields.map((e) => `${e.field}: <${e.placeholder}>`).join('\n')}\n`
|
|
410
421
|
: '';
|
|
422
|
+
// SF19.1 — quando a etapa tem `file_referenced_exists field: entry_point`, injeta o campo
|
|
423
|
+
// guiado + comentário do formato (zona ortogonal, antes de `confianca`, fora dos headings).
|
|
424
|
+
// O motor resolve `entry_point` a partir de podRoot (= pods/squad-forge), então o pod NOVO
|
|
425
|
+
// fica em `../<pod-slug>/...` — sem esta guia o veto trava sem pista de como preencher.
|
|
426
|
+
const entryPoint = hasEntryPointRef(veto)
|
|
427
|
+
? '<!-- Campo de máquina do veto file_referenced_exists (field: entry_point) — NÃO é heading. -->\n'
|
|
428
|
+
+ 'entry_point: <../<pod-slug>/agents/<agente-dono>.md>\n'
|
|
429
|
+
+ '<!-- relativo à raiz do squad-forge: o motor resolve entry_point a partir de pods/squad-forge,\n'
|
|
430
|
+
+ ' então use ../<pod-slug>/... para apontar o pod NOVO (não pods/<pod-slug>/...). -->\n'
|
|
431
|
+
: '';
|
|
411
432
|
return `# Template de saída — etapa \`${stepId}\` (agente \`${agent}\`, artefato \`${output}\`)
|
|
412
433
|
|
|
413
434
|
> Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
|
|
@@ -416,7 +437,7 @@ function stepTemplate(stepId, agent, output, sections, veto, extraFields) {
|
|
|
416
437
|
|
|
417
438
|
${body}
|
|
418
439
|
<!-- Campo(s) de máquina do(s) padrão(ões) declarado(s) (SF12.4a/ADR-030 Blocos G/H), quando aplicável — NÃO é heading. -->
|
|
419
|
-
${extras}<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
440
|
+
${extras}${entryPoint}<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
420
441
|
confianca: <alta|media|baixa>
|
|
421
442
|
`;
|
|
422
443
|
}
|
|
@@ -763,7 +784,17 @@ function synthesizeArtifactText(step, opts = {}) {
|
|
|
763
784
|
const broken = opts.breakAssertion === a;
|
|
764
785
|
// O agente-stub do AC26 garante existência real de agents/<agent>.md sob podRoot
|
|
765
786
|
// (base de resolução confirmada pelo `*review` — pc-run-pod.cjs:466).
|
|
766
|
-
|
|
787
|
+
// SF19.1 — para `field: entry_point` (referência cross-pod do register), emite a forma
|
|
788
|
+
// `../<basename(podDir)>/agents/<agent>.md`: sobe ao pai de podRoot e volta pelo mesmo
|
|
789
|
+
// nome, exercitando EXATAMENTE o `path.resolve(podRoot, '..', <pod>, ...)` que a produção
|
|
790
|
+
// usa para apontar um pod IRMÃO — e resolvendo a um arquivo que o AC26 garante existir.
|
|
791
|
+
// Sem podDir (rota direta sem generatePod) ou para os demais campos (`entregavel`,
|
|
792
|
+
// in-pod), mantém `agents/<agent>.md` — não regride o smoke de nenhum outro pod.
|
|
793
|
+
const crossPod = a.field === 'entry_point' && opts.podDir;
|
|
794
|
+
const ref = broken
|
|
795
|
+
? 'arquivo-inexistente-smoke.md'
|
|
796
|
+
: (crossPod ? `../${path.basename(opts.podDir)}/agents/${step.agent}.md` : `agents/${step.agent}.md`);
|
|
797
|
+
fieldLines.push(`${a.field}: ${ref}`);
|
|
767
798
|
seen.add(a.field);
|
|
768
799
|
}
|
|
769
800
|
}
|
|
@@ -778,14 +809,14 @@ function synthesizeArtifactText(step, opts = {}) {
|
|
|
778
809
|
* `veto_violation` da etapa-alvo. `breakField`, quando dado, nomeia a assertion a quebrar
|
|
779
810
|
* (AC27b — mecanismo específico); default: a 1ª assertion da etapa-alvo (AC27 — base).
|
|
780
811
|
*/
|
|
781
|
-
function buildSmokeSidecar(steps, targetStepId, breakField) {
|
|
812
|
+
function buildSmokeSidecar(steps, targetStepId, breakField, podDir) {
|
|
782
813
|
const artifacts = {};
|
|
783
|
-
for (const step of steps) artifacts[step.id] = synthesizeArtifactText(step);
|
|
814
|
+
for (const step of steps) artifacts[step.id] = synthesizeArtifactText(step, { podDir });
|
|
784
815
|
const targetStep = steps.find((s) => s.id === targetStepId);
|
|
785
|
-
const templateViolation = synthesizeArtifactText(targetStep, { dropFirstSection: true });
|
|
816
|
+
const templateViolation = synthesizeArtifactText(targetStep, { dropFirstSection: true, podDir });
|
|
786
817
|
const assertions = stepAssertions(targetStep);
|
|
787
818
|
const breakAssertion = (breakField && assertions.find((a) => a.field === breakField)) || assertions[0];
|
|
788
|
-
const vetoViolation = synthesizeArtifactText(targetStep, { breakAssertion });
|
|
819
|
+
const vetoViolation = synthesizeArtifactText(targetStep, { breakAssertion, podDir });
|
|
789
820
|
return {
|
|
790
821
|
_comment: 'Cenário de smoke SINTETIZADO por forge-generate.cjs (SF12.4a/ADR-030 Bloco I) — canário ' +
|
|
791
822
|
'ESTRUTURAL (satisfaz a forma das veto.assertions declaradas), não redação de conteúdo (fronteira ADR-002). ' +
|
|
@@ -1105,7 +1136,7 @@ function generatePod(spec, podDir, opts = {}) {
|
|
|
1105
1136
|
const basePath = path.join(podDir, 'workflows', `wf-${workflowId}.smoke.json`);
|
|
1106
1137
|
if (!fs.existsSync(basePath)) {
|
|
1107
1138
|
// AC28 já foi checado ANTES de qualquer escrita (ver acima, hoisted com `wantsWorkflow`).
|
|
1108
|
-
emit(basePath, `${JSON.stringify(buildSmokeSidecar(steps, lastStep.id), null, 2)}\n`);
|
|
1139
|
+
emit(basePath, `${JSON.stringify(buildSmokeSidecar(steps, lastStep.id, undefined, podDir), null, 2)}\n`);
|
|
1109
1140
|
written.push(basePath);
|
|
1110
1141
|
}
|
|
1111
1142
|
|
|
@@ -1126,7 +1157,7 @@ function generatePod(spec, podDir, opts = {}) {
|
|
|
1126
1157
|
if (!steps.some((s) => s.id === m.stepId)) continue;
|
|
1127
1158
|
const scenarioPath = path.join(podDir, 'workflows', `wf-${workflowId}.${m.stepId}.smoke.json`);
|
|
1128
1159
|
if (!fs.existsSync(scenarioPath)) {
|
|
1129
|
-
emit(scenarioPath, `${JSON.stringify(buildSmokeSidecar(steps, m.stepId, m.field), null, 2)}\n`);
|
|
1160
|
+
emit(scenarioPath, `${JSON.stringify(buildSmokeSidecar(steps, m.stepId, m.field, podDir), null, 2)}\n`);
|
|
1130
1161
|
written.push(scenarioPath);
|
|
1131
1162
|
}
|
|
1132
1163
|
}
|
|
@@ -79,7 +79,7 @@ const { spawnSync } = require('node:child_process');
|
|
|
79
79
|
const podMemory = require('./pod-memory.cjs');
|
|
80
80
|
const { generatePod, stepsFromSpec, slug } = require('./forge-generate.cjs');
|
|
81
81
|
const { VETO_TYPES, parseYaml } = require('./validate-pod-workflow.cjs');
|
|
82
|
-
const { scanClone, deriveDenylist } = require('./validate-no-clone.cjs');
|
|
82
|
+
const { scanClone, deriveDenylist, readInstanceSeedTerms } = require('./validate-no-clone.cjs');
|
|
83
83
|
|
|
84
84
|
const REPO_ROOT = path.resolve(__dirname, '..');
|
|
85
85
|
const VETO_CHECKS_ROOT = path.join(REPO_ROOT, 'scripts', 'veto-checks');
|
|
@@ -619,7 +619,10 @@ function hardenKnowledge(args) {
|
|
|
619
619
|
// Determinístico, sem limiar: prosa nova que encarne um mind ou cite token de
|
|
620
620
|
// squad sem citação reprova. (A regra 4, knowledge-sem-fonte, fica FORA por
|
|
621
621
|
// decisão — DF-SF10.10-2.1: reprova 4/5 knowledge reais, inclusive o caso motivador.)
|
|
622
|
-
|
|
622
|
+
// ADR-041 D2: o seed vem da denylist EXTERNA opcional de instância (não mais de
|
|
623
|
+
// um `require` de validate-branding.js). Ausente → [], e a proveniência ainda é
|
|
624
|
+
// provada pela derivação por squad-source onde aplicável.
|
|
625
|
+
const cloneViolations = scanClone(targetAbs, deriveDenylist(null, readInstanceSeedTerms()));
|
|
623
626
|
if (cloneViolations.length > 0) {
|
|
624
627
|
const detail = cloneViolations.slice(0, 5)
|
|
625
628
|
.map((v) => `${v.rule} (linha ${v.line}): "${v.term}" — ${v.text}`).join('; ');
|