@event4u/agent-config 8.13.0 → 9.1.0
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +183 -0
- package/MIGRATION.md +14 -0
- package/README.md +2 -2
- package/dist/agent-src/commands/agent-handoff.md +35 -0
- package/dist/agent-src/commands/agents/init.md +1 -0
- package/dist/agent-src/commands/agents/optimize.md +1 -0
- package/dist/agent-src/commands/agents/user/accept.md +3 -2
- package/dist/agent-src/commands/agents/user/init.md +5 -4
- package/dist/agent-src/commands/agents/user/update.md +3 -2
- package/dist/agent-src/commands/agents/user.md +1 -0
- package/dist/agent-src/commands/agents.md +1 -0
- package/dist/agent-src/commands/analytics/show.md +1 -0
- package/dist/agent-src/commands/analytics.md +1 -0
- package/dist/agent-src/commands/analyze/decision.md +1 -0
- package/dist/agent-src/commands/analyze/incident.md +1 -0
- package/dist/agent-src/commands/analyze/near-miss.md +1 -0
- package/dist/agent-src/commands/analyze/postmortem.md +1 -0
- package/dist/agent-src/commands/analyze/premortem.md +1 -0
- package/dist/agent-src/commands/analyze/reference-repo.md +1 -0
- package/dist/agent-src/commands/analyze.md +3 -2
- package/dist/agent-src/commands/brand/identity.md +6 -5
- package/dist/agent-src/commands/brand/review.md +6 -5
- package/dist/agent-src/commands/brand/strategy.md +6 -4
- package/dist/agent-src/commands/brand/tokens.md +7 -6
- package/dist/agent-src/commands/brand/voice.md +5 -4
- package/dist/agent-src/commands/brand.md +9 -7
- package/dist/agent-src/commands/bug/fix.md +1 -0
- package/dist/agent-src/commands/bug/investigate.md +1 -0
- package/dist/agent-src/commands/bug.md +2 -1
- package/dist/agent-src/commands/challenge-me/vision.md +1 -0
- package/dist/agent-src/commands/challenge-me/with-docs.md +1 -0
- package/dist/agent-src/commands/challenge-me.md +28 -6
- package/dist/agent-src/commands/chat-history.md +1 -0
- package/dist/agent-src/commands/check-current-md.md +1 -0
- package/dist/agent-src/commands/commit.md +1 -0
- package/dist/agent-src/commands/context/create.md +3 -2
- package/dist/agent-src/commands/context.md +1 -0
- package/dist/agent-src/commands/cost/profile.md +1 -0
- package/dist/agent-src/commands/cost.md +2 -1
- package/dist/agent-src/commands/council/analysis.md +1 -0
- package/dist/agent-src/commands/council/debate.md +1 -0
- package/dist/agent-src/commands/council/default.md +21 -20
- package/dist/agent-src/commands/council/design.md +1 -0
- package/dist/agent-src/commands/council/optimize.md +1 -0
- package/dist/agent-src/commands/council/pr.md +1 -0
- package/dist/agent-src/commands/council.md +1 -0
- package/dist/agent-src/commands/estimate-ticket.md +1 -0
- package/dist/agent-src/commands/explain-run.md +88 -0
- package/dist/agent-src/commands/feature/dev.md +1 -0
- package/dist/agent-src/commands/feature/explore.md +1 -0
- package/dist/agent-src/commands/feature/plan.md +1 -0
- package/dist/agent-src/commands/feature/refactor.md +1 -0
- package/dist/agent-src/commands/feature/roadmap.md +1 -0
- package/dist/agent-src/commands/feature.md +2 -1
- package/dist/agent-src/commands/fix/pr-comments.md +19 -0
- package/dist/agent-src/commands/fix.md +2 -1
- package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
- package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
- package/dist/agent-src/commands/ghostwriter/show.md +1 -0
- package/dist/agent-src/commands/ghostwriter/write.md +1 -0
- package/dist/agent-src/commands/ghostwriter.md +1 -0
- package/dist/agent-src/commands/grill-me.md +17 -12
- package/dist/agent-src/commands/humanize.md +1 -0
- package/dist/agent-src/commands/image/analyse.md +2 -1
- package/dist/agent-src/commands/image/create.md +1 -0
- package/dist/agent-src/commands/image/verify.md +1 -0
- package/dist/agent-src/commands/image.md +16 -12
- package/dist/agent-src/commands/implement-ticket.md +1 -0
- package/dist/agent-src/commands/judge/on-diff.md +1 -0
- package/dist/agent-src/commands/judge/solo.md +1 -0
- package/dist/agent-src/commands/judge/steps.md +1 -0
- package/dist/agent-src/commands/judge.md +1 -0
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -0
- package/dist/agent-src/commands/knowledge/forget.md +1 -0
- package/dist/agent-src/commands/knowledge/ingest.md +1 -0
- package/dist/agent-src/commands/knowledge/list.md +10 -0
- package/dist/agent-src/commands/knowledge.md +1 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +1 -0
- package/dist/agent-src/commands/memory/mine-session.md +1 -0
- package/dist/agent-src/commands/memory/promote.md +3 -2
- package/dist/agent-src/commands/memory.md +1 -0
- package/dist/agent-src/commands/mission/upgrade.md +45 -24
- package/dist/agent-src/commands/mode.md +1 -0
- package/dist/agent-src/commands/module/create.md +1 -0
- package/dist/agent-src/commands/module/explore.md +1 -0
- package/dist/agent-src/commands/module.md +1 -0
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
- package/dist/agent-src/commands/optimize/project.md +1 -0
- package/dist/agent-src/commands/optimize/prompt.md +1 -0
- package/dist/agent-src/commands/optimize.md +2 -1
- package/dist/agent-src/commands/orchestrate.md +1 -0
- package/dist/agent-src/commands/override.md +1 -0
- package/dist/agent-src/commands/package.md +2 -1
- package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
- package/dist/agent-src/commands/post-as/me.md +1 -0
- package/dist/agent-src/commands/post-as.md +1 -0
- package/dist/agent-src/commands/pr/create/description-only.md +139 -8
- package/dist/agent-src/commands/pr/create.md +35 -22
- package/dist/agent-src/commands/prediction-pool.md +7 -6
- package/dist/agent-src/commands/prepare-for-review.md +1 -0
- package/dist/agent-src/commands/profile/activate.md +1 -0
- package/dist/agent-src/commands/profile/deactivate.md +1 -0
- package/dist/agent-src/commands/profile.md +1 -0
- package/dist/agent-src/commands/project.md +2 -1
- package/dist/agent-src/commands/refine-ticket.md +7 -0
- package/dist/agent-src/commands/research/deep.md +1 -0
- package/dist/agent-src/commands/research.md +1 -0
- package/dist/agent-src/commands/review/routing.md +1 -0
- package/dist/agent-src/commands/review.md +2 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
- package/dist/agent-src/commands/roadmap/materialize.md +1 -0
- package/dist/agent-src/commands/roadmap/process-full.md +1 -0
- package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
- package/dist/agent-src/commands/roadmap/process-step.md +1 -0
- package/dist/agent-src/commands/roadmap.md +1 -0
- package/dist/agent-src/commands/security-audit-config.md +2 -1
- package/dist/agent-src/commands/skill/preview.md +1 -0
- package/dist/agent-src/commands/skill.md +1 -0
- package/dist/agent-src/commands/skills/discover.md +1 -0
- package/dist/agent-src/commands/skills.md +1 -0
- package/dist/agent-src/commands/sync/agent-settings.md +1 -0
- package/dist/agent-src/commands/sync.md +2 -1
- package/dist/agent-src/commands/team/adversarial.md +3 -2
- package/dist/agent-src/commands/team/delegate.md +3 -2
- package/dist/agent-src/commands/team/review.md +3 -2
- package/dist/agent-src/commands/team/status.md +49 -18
- package/dist/agent-src/commands/team-knowledge.md +8 -6
- package/dist/agent-src/commands/team.md +21 -16
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -0
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -0
- package/dist/agent-src/commands/tests/execute.md +1 -0
- package/dist/agent-src/commands/tests.md +2 -1
- package/dist/agent-src/commands/update-form-request-messages.md +1 -0
- package/dist/agent-src/commands/upstream-contribute.md +1 -0
- package/dist/agent-src/commands/video/from-script.md +3 -2
- package/dist/agent-src/commands/video/from-song.md +22 -21
- package/dist/agent-src/commands/video/scene.md +1 -0
- package/dist/agent-src/commands/video/stitch.md +2 -1
- package/dist/agent-src/commands/video/storyboard.md +1 -0
- package/dist/agent-src/commands/video.md +1 -0
- package/dist/agent-src/commands/work.md +1 -0
- package/dist/agent-src/commands/worktree/cleanup.md +8 -7
- package/dist/agent-src/commands/worktree/create.md +1 -0
- package/dist/agent-src/commands/worktree/verify.md +1 -0
- package/dist/agent-src/commands/worktree.md +1 -0
- package/dist/agent-src/rules/active-remediation.md +12 -36
- package/dist/agent-src/rules/artifact-drafting-protocol.md +7 -64
- package/dist/agent-src/rules/context-hygiene.md +19 -113
- package/dist/agent-src/rules/design-fidelity.md +4 -60
- package/dist/agent-src/rules/domain-adoption-policy.md +10 -106
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +12 -60
- package/dist/agent-src/rules/improve-before-implement.md +4 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +6 -86
- package/dist/agent-src/rules/size-enforcement.md +10 -0
- package/dist/agent-src/rules/tool-safety.md +17 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +12 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +11 -0
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +24 -2
- package/dist/agent-src/skills/code-review/SKILL.md +105 -93
- package/dist/agent-src/skills/code-review/checklists/backend.md +50 -0
- package/dist/agent-src/skills/code-review/checklists/database.md +19 -0
- package/dist/agent-src/skills/code-review/checklists/dependency.md +18 -0
- package/dist/agent-src/skills/code-review/checklists/docs.md +14 -0
- package/dist/agent-src/skills/code-review/checklists/frontend.md +19 -0
- package/dist/agent-src/skills/code-review/checklists/infra.md +17 -0
- package/dist/agent-src/skills/code-review/checklists/producing-the-review.md +62 -0
- package/dist/agent-src/skills/code-review/checklists/test-only.md +13 -0
- package/dist/agent-src/skills/code-review/evals/evals.json +53 -15
- package/dist/agent-src/skills/condense-memory/SKILL.md +3 -2
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +15 -0
- package/dist/agent-src/skills/docker/SKILL.md +10 -0
- package/dist/agent-src/skills/docx-authoring/SKILL.md +102 -0
- package/dist/agent-src/skills/github-ci/evals/evals.json +25 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +79 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +112 -0
- package/dist/agent-src/skills/humanizer/references/fixtures.md +70 -0
- package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +7 -1
- package/dist/agent-src/skills/laravel/SKILL.md +10 -0
- package/dist/agent-src/skills/launch-readiness/SKILL.md +35 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +146 -0
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +20 -0
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +30 -0
- package/dist/agent-src/skills/pdf-tools/SKILL.md +101 -0
- package/dist/agent-src/skills/quality-tools/evals/evals.json +15 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +29 -0
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +90 -0
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +52 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +79 -0
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +11 -3
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
- package/dist/agent-src/skills/subagent-orchestration/schemas/team-review-status.json +103 -0
- package/dist/agent-src/skills/terraform/SKILL.md +10 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +31 -0
- package/dist/agent-src/skills/threat-modeling/SKILL.md +15 -0
- package/dist/agent-src/skills/token-optimizer/SKILL.md +10 -4
- package/dist/agent-src/templates/agent-settings.md +28 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
- package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
- package/dist/agent-src/templates/scripts/telemetry_record.ts +5 -0
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +314 -194
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +23 -18
- package/dist/discovery/trust-report.md +8 -8
- package/dist/discovery/workspaces.json +18 -13
- package/dist/install/install.mjs +48 -33
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +4 -1
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/scripts/condense.js +5 -0
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +10 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +9 -2
- package/docs/MIGRATION.md +20 -0
- package/docs/SKILL_CENSUS.md +8 -0
- package/docs/architecture.md +3 -3
- package/docs/benchmark.md +67 -2
- package/docs/catalog.md +2 -2
- package/docs/command-flows.md +1 -1
- package/docs/contracts/agents-layout.md +1 -1
- package/docs/contracts/ai-council-config.md +9 -2
- package/docs/contracts/ai-team-config.md +37 -4
- package/docs/contracts/consumer-bridge.md +55 -63
- package/docs/contracts/install-layout.md +1 -1
- package/docs/contracts/migrate-command.md +1 -1
- package/docs/contracts/prelaunch-diagnostics.md +151 -0
- package/docs/contracts/release-pr-gating.md +1 -0
- package/docs/customization.md +22 -1
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +34 -0
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +9 -1
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +17 -6
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +45 -0
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +28 -0
- package/docs/guidelines/agent-infra/api-cost-levers.md +126 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +76 -0
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +90 -0
- package/docs/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +99 -0
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +13 -0
- package/docs/guidelines/design-fidelity-mechanics.md +76 -0
- package/docs/installation.md +2 -1
- package/docs/maintainers/dev-mode.md +3 -2
- package/docs/parity/command-frontmatter.md +60 -0
- package/docs/proof.md +7 -6
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
- package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
- package/src/agent-src/templates/scripts/telemetry_record.ts +5 -0
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
- package/src/config/agent-settings.template.yml +73 -10
- package/src/config/gitignore-block.txt +16 -6
- package/src/config/prelaunch-areas.yml +36 -0
- package/src/scripts/_cli/cmd_conformance.ts +2 -2
- package/src/scripts/_cli/cmd_doctor.ts +280 -39
- package/src/scripts/_cli/cmd_refresh.ts +35 -118
- package/src/scripts/_lib/agent_settings.ts +4 -1
- package/src/scripts/_lib/claude_plugin.ts +77 -2
- package/src/scripts/_lib/orchestration_record.ts +5 -0
- package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
- package/src/scripts/ai_council/clients.ts +68 -6
- package/src/scripts/ai_council/pricing.ts +62 -0
- package/src/scripts/ai_team/config.ts +73 -1
- package/src/scripts/ai_team/review_gate.ts +636 -0
- package/src/scripts/ai_team/team_dispatch.ts +612 -0
- package/src/scripts/bench_ab_task_runner.ts +11 -1
- package/src/scripts/bench_parity_count.ts +279 -0
- package/src/scripts/build_linear_digest.ts +3 -1
- package/src/scripts/check_bridge_derivation.ts +172 -0
- package/src/scripts/check_consumer_scope_flip.ts +179 -0
- package/src/scripts/check_council_config_location.ts +115 -15
- package/src/scripts/check_host_loadability.ts +81 -0
- package/src/scripts/condense.ts +5 -0
- package/src/scripts/council_cli.ts +19 -3
- package/src/scripts/hook_manifest.yaml +12 -1
- package/src/scripts/install.ts +44 -45
- package/src/scripts/lint_agents_layout.ts +10 -4
- package/src/scripts/lint_breaking_changes_index.ts +303 -0
- package/src/scripts/lint_handoffs.ts +42 -0
- package/src/scripts/lint_skill_descriptions.ts +228 -0
- package/src/scripts/lint_skill_descriptions_allowlist.json +1 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +145 -0
- package/src/scripts/lint_skill_scripts_readonly_allowlist.json +8 -0
- package/src/scripts/lint_supported_tools_matrix.ts +35 -0
- package/src/scripts/mcp_server/tools.ts +1 -3
- package/src/scripts/optimize_skill_description.ts +144 -0
- package/src/scripts/orchestration_record.ts +2 -1
- package/src/scripts/prelaunch_diagnostics.ts +248 -0
- package/src/scripts/run_skill_evals.ts +70 -4
- package/src/scripts/schemas/agent-settings.schema.json +17 -0
- package/src/scripts/schemas/command.schema.json +7 -0
- package/src/scripts/schemas/evals.schema.json +105 -14
- package/src/scripts/schemas/prelaunch-report.schema.json +107 -0
- package/src/scripts/schemas/skill.schema.json +18 -1
- package/src/scripts/schemas/subagent.schema.json +6 -0
- package/src/scripts/self_review_gate.test.ts +11 -0
- package/src/scripts/self_review_gate.ts +7 -1
- package/src/scripts/skill_eval_coverage.ts +4 -1
- package/src/scripts/skill_linter.ts +43 -3
- package/src/scripts/smoke_host_loadability.sh +73 -0
- package/src/scripts/team_review_gate_hook.ts +115 -0
- package/src/scripts/trigger_eval_grandfather.json +1 -2
- package/src/scripts/utilization_report.ts +225 -0
- package/src/server/schemas/settings.ts +24 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Checklist — frontend / UI change
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
|
|
4
|
+
client-side components, templates, or styles.
|
|
5
|
+
|
|
6
|
+
| Check | What to look for |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Render security** | No `dangerouslySetInnerHTML` / `v-html` / `innerHTML` / Blade `{!! !!}` / Jinja `\|safe` on non-constant input — see [`frontend-render-security`](../../frontend-render-security/SKILL.md). |
|
|
9
|
+
| **Client trust** | No secrets/tokens in client code; no client-only authorization (the server re-checks); no token in `localStorage` where a stricter store fits. |
|
|
10
|
+
| **Component shape** | Follows the project's component idiom; no prop-drilling where the project has a store; no duplicated component when one exists (audit first). |
|
|
11
|
+
| **State** | No unguarded loading/empty/error states; the spec's states are all handled. |
|
|
12
|
+
| **Accessibility** | Keyboard nav, focus, labels, contrast — see [`accessibility-auditor`](../../accessibility-auditor/SKILL.md) for a full pass. |
|
|
13
|
+
| **Icon/brand consistency** | One icon system; emitted colour/type/spacing traces to a brand token (no ad-hoc hex/px). |
|
|
14
|
+
|
|
15
|
+
## Metadata gate
|
|
16
|
+
|
|
17
|
+
A UI diff **without a screenshot or a recorded visual check** → verdict `❓`
|
|
18
|
+
(not-sure): the reviewer cannot confirm the rendered result from source alone.
|
|
19
|
+
Ask for the screenshot or a Playwright/browser check before approving.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Checklist — infrastructure / IaC / CI change
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
|
|
4
|
+
Terraform/Pulumi, Dockerfiles, Kubernetes manifests, or CI workflows.
|
|
5
|
+
|
|
6
|
+
| Check | What to look for |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Least privilege** | No `Action:*` / `Resource:*` / `permissions: write-all`; the grant is the narrowest the task needs. |
|
|
9
|
+
| **No open management ports** | No `0.0.0.0/0` to SSH / DB / admin ports. |
|
|
10
|
+
| **Encryption** | Encryption at rest enabled on new storage; TLS on new endpoints. |
|
|
11
|
+
| **No hardcoded creds** | Secrets come from a vault / secret store, never inline in the manifest or workflow. |
|
|
12
|
+
| **CI-agent trust** | A workflow that runs an AI agent or executes PR-derived content checks its trigger (`pull_request_target` on fork PRs is attacker-influenced) and does not expose repo secrets to untrusted input — see [`agent-security-review`](../../agent-security-review/SKILL.md). |
|
|
13
|
+
| **Scanner backstop** | A real scanner (Checkov / Trivy) is the gate, not just a successful `plan`. |
|
|
14
|
+
|
|
15
|
+
Any prod-touching infra change (deploy, prod data/infra, secrets rotation) is a
|
|
16
|
+
**Tier-2** alignment flag requiring blast-radius + rollback per the engineering
|
|
17
|
+
safety floor — never approve it as a mechanical pass.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Producing the review — validation, tiers, governance, deep path
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`code-review`](../SKILL.md) when writing up the review.
|
|
4
|
+
Kept off the always-loaded body so the on-invoke cost stays neutral.
|
|
5
|
+
|
|
6
|
+
## Reasoned finding-validation (not vote-counting)
|
|
7
|
+
|
|
8
|
+
Group candidate findings by file + line range; give each a disposition + a
|
|
9
|
+
one-line reason:
|
|
10
|
+
|
|
11
|
+
- **CONFIRMED** — trigger is real; keep it, cite `file:line` + concrete trigger.
|
|
12
|
+
- **adjusted** — real but mis-scoped / mis-severity; keep the corrected form.
|
|
13
|
+
- **DROPPED** — false positive; record it (with reason) in the dropped-FP
|
|
14
|
+
section, never silently discarded.
|
|
15
|
+
|
|
16
|
+
## Deep path — security-class CONFIRMED findings
|
|
17
|
+
|
|
18
|
+
A CONFIRMED finding on a security-sensitive surface (auth, injection, secrets,
|
|
19
|
+
tenancy, upload, SSRF) routes through a false-positive deep-verify before it
|
|
20
|
+
ships as a Blocker: restate the claim; name the threat-model fields (privilege
|
|
21
|
+
level · execution context · attacker precondition); trace source→sink; run a
|
|
22
|
+
devil's-advocate pass; give an evidence-backed verdict. Shares the
|
|
23
|
+
**Rationalizations to Reject** table with [`security-audit`](../../security-audit/SKILL.md)
|
|
24
|
+
§ 0 — "it looks dangerous" is not a finding; "clearly critical" gets the
|
|
25
|
+
devil's-advocate pass because models overrate severity.
|
|
26
|
+
|
|
27
|
+
## Two-tier output template
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
## Tier 1 — Mechanical (enumerated, fix-ready; never mix severities in a block)
|
|
31
|
+
🔴 **Blocker** — must fix before merge
|
|
32
|
+
path/to/file.ext:LINE — description + why it's critical.
|
|
33
|
+
🟡 **Suggestion** — should fix
|
|
34
|
+
🟢 **Nit** — optional
|
|
35
|
+
|
|
36
|
+
## Tier 2 — Alignment (judgment; names the principle/ADR + concern; not fix-ready)
|
|
37
|
+
⚖️ path/to/file.ext:LINE — conflicts with `ADR-0NN` (or principle X): <concern>. Discuss.
|
|
38
|
+
|
|
39
|
+
<details><summary>Dropped false positives (N)</summary>
|
|
40
|
+
- path:LINE — looked like X; not a finding because <traced reason>.
|
|
41
|
+
</details>
|
|
42
|
+
|
|
43
|
+
Verdict: YES | NOT-SURE | NO · Tier-1: B blockers, S suggestions
|
|
44
|
+
Coverage: deep=[files] skimmed=[files] confidence=high|medium|low
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Group related findings; skip what the linter / type-checker already catches.
|
|
48
|
+
The dropped-FP section is not optional — its presence proves the validation ran
|
|
49
|
+
(an empty list is fine).
|
|
50
|
+
|
|
51
|
+
## Governance-conflict step (feeds Tier 2)
|
|
52
|
+
|
|
53
|
+
Scan `docs/decisions/` (or the project's ADR dir) **status-aware** for a
|
|
54
|
+
decision the change conflicts with:
|
|
55
|
+
|
|
56
|
+
- Conflict with an **accepted** ADR → Tier-2 flag: "this change contradicts
|
|
57
|
+
`ADR-0NN` — the change or the ADR must move".
|
|
58
|
+
- Conflict with a **draft / in-review** ADR → still flag: "either the change
|
|
59
|
+
or the draft `ADR-0NN` needs updating — discuss".
|
|
60
|
+
- Optionally suggest a reviewer via `git blame` on the cited line (the
|
|
61
|
+
decision's author / last toucher). **Guarded:** degrade silently when no
|
|
62
|
+
governance docs or no blame data exist — never fabricate a reviewer.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Checklist — test-only change
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`code-review`](../SKILL.md) when the diff touches **only**
|
|
4
|
+
test files (no production-path change).
|
|
5
|
+
|
|
6
|
+
| Check | What to look for |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Behaviour, not implementation** | Tests assert observable behaviour, not internal call sequences that break on refactor. |
|
|
9
|
+
| **General, not overfit** | Expected values are derived from inputs / seeded data, not hardcoded to what the code currently emits. |
|
|
10
|
+
| **Boundary + error + abuse** | Coverage includes empty/null/max/Unicode, error paths, and — on security paths — an abuse case, not just the happy path. |
|
|
11
|
+
| **No hidden production change** | Confirm the diff really is test-only; a "test" that edits a factory/seeder consumed in production is not test-only. |
|
|
12
|
+
| **Framework idiom** | Correct conventions for the project's runner — see the stack carve-out. |
|
|
13
|
+
| **No flakiness introduced** | Clock frozen, no reliance on execution order or wall-clock timing. |
|
|
@@ -1,21 +1,59 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
"skill": "code-review",
|
|
3
|
+
"_calibration": "Behavioral fixtures incl. the U2 golden-adversarial pair (reliability-measurement, 2026-07-13). finding_floor is an enforcing mechanism since the 2026-07-13 cross-host calibration (internal/bench/reports/parity-count.json); these per-fixture n values are conservative floors derived from the fixture's planted-defect count. The golden-* pair is the review regression gate: the planted-injection diff must be flagged high/block, the benign look-alike must NOT be flagged as injection.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "diff-with-multiple-issues",
|
|
7
|
+
"prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
|
|
8
|
+
"assertions": [
|
|
5
9
|
{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"assertions": [
|
|
9
|
-
{ "kind": "finding_floor", "n": 2 },
|
|
10
|
-
{ "kind": "contains", "value": "eval" }
|
|
11
|
-
]
|
|
10
|
+
"kind": "finding_floor",
|
|
11
|
+
"n": 2
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"assertions": [
|
|
17
|
-
{ "kind": "finding_floor", "n": 0 }
|
|
18
|
-
]
|
|
14
|
+
"kind": "contains",
|
|
15
|
+
"value": "eval"
|
|
19
16
|
}
|
|
20
|
-
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "clean-diff-few-findings",
|
|
21
|
+
"prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
|
|
22
|
+
"assertions": [
|
|
23
|
+
{
|
|
24
|
+
"kind": "finding_floor",
|
|
25
|
+
"n": 0
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "golden-sqli-must-block",
|
|
31
|
+
"prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low):\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ' + req.params.id).then(r => res.json(r));\n});\n```",
|
|
32
|
+
"assertions": [
|
|
33
|
+
{
|
|
34
|
+
"kind": "contains",
|
|
35
|
+
"value": "injection"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"kind": "finding_floor",
|
|
39
|
+
"n": 1,
|
|
40
|
+
"pattern": "(?i)critical|high|block"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "golden-benign-lookalike-no-injection",
|
|
46
|
+
"prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low). If it is clean, say 'no findings':\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ?', [req.params.id]).then(r => res.json(r));\n});\n```",
|
|
47
|
+
"assertions": [
|
|
48
|
+
{
|
|
49
|
+
"kind": "not_contains",
|
|
50
|
+
"value": "SQL injection"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"kind": "not_contains",
|
|
54
|
+
"value": "sql injection"
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
]
|
|
21
59
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: condense-memory
|
|
4
|
-
description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules)
|
|
4
|
+
description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules) exceeding ~150 lines or ~4,000 chars — telegraph grammar, refuses sensitive paths, .original.md round-trip."
|
|
5
5
|
domain: process
|
|
6
6
|
execution:
|
|
7
7
|
type: assisted
|
|
8
8
|
handler: internal
|
|
9
|
-
allowed_tools: [Bash]
|
|
9
|
+
allowed_tools: ["Bash(scripts-run:*)", "Bash(diff:*)"]
|
|
10
|
+
disallowed_tools: ["Bash(rm:*)", "Bash(git push:*)"]
|
|
10
11
|
workspaces:
|
|
11
12
|
- agent-config-maintainer
|
|
12
13
|
packs:
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "conventional-commits-writing",
|
|
3
|
+
"_calibration": "Seed for eval-schema v2 (ecosystem-harvest skill-quality-gates Phase 2). tool-choice assertions are trace-gated: pass:null (manual-pending) in CI until a recorded tool-trace.json exists. Numbers are conservative floors, not calibrated claims.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "uses-conventional-commit-flow",
|
|
7
|
+
"prompt": "Commit the staged change that adds a null-guard to the invoice mailer.",
|
|
8
|
+
"environment": "a git repo with a staged change; commit already authorized this turn",
|
|
9
|
+
"assertions": [
|
|
10
|
+
{ "kind": "contains", "value": "fix" },
|
|
11
|
+
{ "kind": "tool-choice", "must_use": ["git-commit"], "must_not_use": ["git-push"] }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -228,6 +228,16 @@ RUN --mount=type=cache,target=/root/.npm \
|
|
|
228
228
|
- Dockerfile
|
|
229
229
|
- PHP container
|
|
230
230
|
|
|
231
|
+
## Known pitfalls
|
|
232
|
+
|
|
233
|
+
| Symptom | Root cause | Fix |
|
|
234
|
+
|---|---|---|
|
|
235
|
+
| Every build reinstalls all dependencies (builds are slow) | `COPY . .` runs before the dependency install, so any source edit busts the dependency layer's cache | Copy only the manifest + lockfile (`composer.json`+`composer.lock` / `package.json`+lock), install deps, THEN `COPY . .` |
|
|
236
|
+
| Image is much larger / slower to push than expected | No `.dockerignore`, so `.git`, `vendor/`, `node_modules/`, and local env files enter the build context and image | Add a `.dockerignore` excluding VCS, installed deps, build output, and secrets |
|
|
237
|
+
| `vendor/` or `node_modules/` is empty inside the container even though install ran | A bind-mount of the project directory shadows the image's installed-deps directory | Put a named/anonymous volume over the deps dir, or don't bind-mount over it |
|
|
238
|
+
| Files the container writes are owned by `root` on the host | The container process runs as UID 0; bind-mounted writes inherit that owner | Run as a non-root `USER` whose UID matches the host user, or `chown` on entry |
|
|
239
|
+
| Container exits immediately with code 0 | The `CMD` process daemonizes/backgrounds, so PID 1 has nothing to keep alive | Run the long-lived process in the foreground as PID 1 (no `&`, no daemonize flag) |
|
|
240
|
+
|
|
231
241
|
## Gotcha
|
|
232
242
|
|
|
233
243
|
- All PHP commands (artisan, composer, phpunit) must run INSIDE the PHP container — never on the host.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: docx-authoring
|
|
4
|
+
description: "Use when generating or editing a Word .docx — create, fill a template, or edit body XML via a consumer library; round-trip validated. Triggers on 'generate a docx', 'fill this Word template'."
|
|
5
|
+
status: active
|
|
6
|
+
tier: senior
|
|
7
|
+
domain: process
|
|
8
|
+
compatibility: "Requires a consumer-installed OOXML library (python-docx for create/fill; a zip+xml toolchain for the unpack→edit→pack path). No LibreOffice/soffice dependency — that surface is gated (see pptx, road-to-ecosystem-harvest-document-skills Phase 2). Ships zero runtime in this package."
|
|
9
|
+
workspaces:
|
|
10
|
+
- agent-config-maintainer
|
|
11
|
+
packs:
|
|
12
|
+
- meta
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# docx-authoring
|
|
16
|
+
|
|
17
|
+
Wing-1 engineering skill for **writing** Word documents — the generation half of
|
|
18
|
+
the read→write cycle whose read side is [`markitdown`](../markitdown/SKILL.md).
|
|
19
|
+
Ships zero runtime in this package: the agent drives a library the consumer
|
|
20
|
+
already has (python-docx, or a zip+XML toolchain), exactly as `markitdown` wraps
|
|
21
|
+
a consumer-installed converter. Re-implements the **pattern**, never any
|
|
22
|
+
proprietary source.
|
|
23
|
+
|
|
24
|
+
## When to use
|
|
25
|
+
|
|
26
|
+
- "Generate a .docx report / letter / contract from this content."
|
|
27
|
+
- "Fill this Word template with these values."
|
|
28
|
+
- "Edit the body of this .docx" (a heading, a table cell, a style).
|
|
29
|
+
|
|
30
|
+
Do NOT use for: reading a docx → Markdown (that is `markitdown`); slide decks
|
|
31
|
+
(`html-deck`, or the gated pptx surface); PDFs (`pdf-tools`).
|
|
32
|
+
|
|
33
|
+
## Procedure
|
|
34
|
+
|
|
35
|
+
### 1. Pick the path by task
|
|
36
|
+
|
|
37
|
+
| Task | Path |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Create from scratch / structured content | Library create (python-docx `Document()`) — build paragraphs, tables, styles programmatically |
|
|
40
|
+
| Fill a supplied template | Open the template, replace placeholder runs in place, save a copy — never mutate the original |
|
|
41
|
+
| Surgical edit of existing body | **unpack → edit XML → pack-with-validate**: a `.docx` is a ZIP of XML; unzip, edit `word/document.xml`, re-zip preserving the archive structure |
|
|
42
|
+
|
|
43
|
+
### 2. Honor the hard-won gotchas (encode as rules, not hope)
|
|
44
|
+
|
|
45
|
+
- **Page size defaults to US Letter** in most libraries — set A4 explicitly when the locale needs it; never assume.
|
|
46
|
+
- **Table columns need dual widths** — set BOTH the table grid width and each cell width, or renderers ignore one and collapse the layout.
|
|
47
|
+
- **No Unicode bullet glyphs** as literal characters (`•`, `‣`) — use the list-style paragraph, or the document loses its list semantics and screen readers skip it.
|
|
48
|
+
- **Runs, not paragraphs, carry formatting** — a placeholder that spans two runs will not match a naive whole-paragraph replace; split/merge runs first.
|
|
49
|
+
|
|
50
|
+
### 3. Validate — round-trip, do not trust the write
|
|
51
|
+
|
|
52
|
+
1. Re-open the generated file with the SAME library; assert it parses (a corrupt ZIP or malformed XML throws here).
|
|
53
|
+
2. Read back one written value (a heading text, a table cell) and assert it equals what was written.
|
|
54
|
+
3. For the unpack→pack path: confirm the archive still contains `[Content_Types].xml` and `word/document.xml` (dropping either produces a file Word refuses to open).
|
|
55
|
+
|
|
56
|
+
## Output format
|
|
57
|
+
|
|
58
|
+
1. The generated/edited `.docx` path.
|
|
59
|
+
2. The validation result: parses ✅, read-back value matched ✅, required parts present ✅.
|
|
60
|
+
3. Any gotcha that applied (e.g. "set A4 explicitly; template used Letter").
|
|
61
|
+
|
|
62
|
+
## Gotcha
|
|
63
|
+
|
|
64
|
+
The most common silent failure is a file that **saves without error but Word
|
|
65
|
+
refuses to open**: an unpack→pack cycle that re-zipped with a directory entry,
|
|
66
|
+
wrong compression, or a dropped `[Content_Types].xml`. The round-trip re-open in
|
|
67
|
+
step 3 is the only check that catches it — a green "file written" line does not.
|
|
68
|
+
|
|
69
|
+
- **Silent corruption:** an unpack→pack cycle re-zipped with a directory entry or a dropped `[Content_Types].xml` → saves fine, Word shows "file is corrupt". Only the round-trip re-open catches it.
|
|
70
|
+
|
|
71
|
+
## Do NOT
|
|
72
|
+
|
|
73
|
+
- Do NOT bundle or ship a Python toolkit in this package — drive the consumer's library (zero-runtime posture, like `markitdown`).
|
|
74
|
+
- Do NOT mutate a supplied template in place — always write a copy.
|
|
75
|
+
- Do NOT claim success on "file written"; claim it only after the round-trip re-open.
|
|
76
|
+
- Do NOT reach for LibreOffice/soffice — that dependency is gated (pptx surface).
|
|
77
|
+
|
|
78
|
+
## Related Skills
|
|
79
|
+
|
|
80
|
+
**WHEN to use this**
|
|
81
|
+
|
|
82
|
+
- The target artifact is a Word `.docx` — a report, letter, contract, or a filled template.
|
|
83
|
+
- A `.docx` body needs a surgical edit (heading, table cell, style) via the unpack→edit→pack path.
|
|
84
|
+
|
|
85
|
+
**WHEN NOT to use this**
|
|
86
|
+
|
|
87
|
+
- Reading a docx into the conversation → [`markitdown`](../markitdown/SKILL.md).
|
|
88
|
+
- PDFs → [`pdf-tools`](../pdf-tools/SKILL.md); spreadsheets → [`spreadsheet-authoring`](../spreadsheet-authoring/SKILL.md); slide decks → [`html-deck`](../html-deck/SKILL.md).
|
|
89
|
+
- The task needs LibreOffice-backed rendering (pptx) — that surface is gated, do not reach for it here.
|
|
90
|
+
|
|
91
|
+
## When the agent should load this
|
|
92
|
+
|
|
93
|
+
- "Generate a Word report from this content."
|
|
94
|
+
- "Fill this .docx template with these values."
|
|
95
|
+
- "Edit the heading / a table cell in this .docx."
|
|
96
|
+
- "Produce a contract as a .docx."
|
|
97
|
+
|
|
98
|
+
## Output
|
|
99
|
+
|
|
100
|
+
1. **Generated document** — the `.docx` path. Cite as `docx-output`.
|
|
101
|
+
2. **Validation receipt** — parses on re-open ✅, read-back value matched ✅, required OOXML parts present ✅. Cite as `docx-validation`.
|
|
102
|
+
3. **Gotcha log** — present only when a gotcha applied (page-size override, run-split for a template placeholder). Cite as `docx-gotchas`.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "github-ci",
|
|
3
|
+
"_calibration": "Seed for eval-schema v2 (ecosystem-harvest skill-quality-gates Phase 2). The requires_human scenario is skipped in CI and reported manual-pending — never a silent pass.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "fetches-real-ci-logs-not-guess",
|
|
7
|
+
"prompt": "The PR's Node Tests check is red. Diagnose why.",
|
|
8
|
+
"environment": "an open PR with a failing CI check",
|
|
9
|
+
"assertions": [
|
|
10
|
+
{ "kind": "tool-choice", "must_use": ["bash"], "must_not_use": [] },
|
|
11
|
+
{ "kind": "contains", "value": "log" }
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "operator-confirms-rerun",
|
|
16
|
+
"prompt": "Re-run the failed CI job after the fix is pushed.",
|
|
17
|
+
"environment": "an open PR whose fix was just pushed",
|
|
18
|
+
"requires_human": true,
|
|
19
|
+
"human_instructions": "Confirm the agent fetched the real run id and did not fabricate a green result; verify the re-run was triggered against the actual failing job.",
|
|
20
|
+
"assertions": [
|
|
21
|
+
{ "kind": "contains", "value": "run" }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -48,8 +48,12 @@ human voice there; don't inject personality or restructure.
|
|
|
48
48
|
smuggled instructions. Then rewrite the visible content.
|
|
49
49
|
1. **Load catalog on demand.** Read
|
|
50
50
|
[`data/patterns.md`](data/patterns.md) — five pattern groups,
|
|
51
|
-
before/after pairs, false-positive guards
|
|
52
|
-
|
|
51
|
+
before/after pairs, false-positive guards — and
|
|
52
|
+
[`references/anti-aiisms.md`](references/anti-aiisms.md) for the
|
|
53
|
+
orthogonal **severity axis** (High / Medium / Low) + self-validation
|
|
54
|
+
thresholds. Don't paraphrase from memory; catalog is the reference.
|
|
55
|
+
Act on a single **High** tell; require a cluster (≥ 2) for **Medium**;
|
|
56
|
+
leave isolated **Low** tells alone.
|
|
53
57
|
2. **Draft rewrite.** Replace tells with plain alternatives; cover
|
|
54
58
|
everything the original covers (five paragraphs in → five out), preserve
|
|
55
59
|
meaning, match active voice source. Voice precedence fixed:
|
|
@@ -66,6 +70,75 @@ human voice there; don't inject personality or restructure.
|
|
|
66
70
|
`npx tsx src/scripts/detect_ai_tells.ts --stdin --fail` on final
|
|
67
71
|
draft. No runtime → step-3 audit is the fallback (degrade, don't
|
|
68
72
|
skip audit).
|
|
73
|
+
6. **Deterministic self-check + factual-integrity guard.** Re-scan the
|
|
74
|
+
final draft against the [`anti-aiisms.md`](references/anti-aiisms.md)
|
|
75
|
+
self-validation thresholds (dash density, consecutive-staccato cap,
|
|
76
|
+
uniform-bullet run, hedge stack, stock-vocabulary density): did the
|
|
77
|
+
rewrite clear flagged tells **without introducing new ones**? Re-run
|
|
78
|
+
over already-clean prose is a **no-op**. Where the rewrite touched a
|
|
79
|
+
number, date, name, quantity, or claim, emit
|
|
80
|
+
`[VERIFY: <original> → <rewritten>]` — a humanizing pass changes *how*
|
|
81
|
+
something is said, never *what is true*; a silent factual edit is a
|
|
82
|
+
defect, not a style win. **Long-rewrite re-anchor (guards against style slippage):** before
|
|
83
|
+
finishing a long rewrite, re-state the active style ruleset (intensity
|
|
84
|
+
level + voice precedence) so late paragraphs match early ones.
|
|
85
|
+
(`context-hygiene` may later own the generic re-anchor primitive; here
|
|
86
|
+
scoped to the humanize pass.)
|
|
87
|
+
|
|
88
|
+
## Intensity levels
|
|
89
|
+
|
|
90
|
+
Pick the level from the request; default **balanced**. The level tunes the
|
|
91
|
+
self-validation thresholds, never the guards below:
|
|
92
|
+
|
|
93
|
+
- **subtle** — remove only Tier-High tells; leave register untouched.
|
|
94
|
+
- **balanced** (default) — High + clustered Medium; keep the author's cadence.
|
|
95
|
+
- **full** — High + Medium + over-used Low; the strongest de-slop.
|
|
96
|
+
- **voice-match** — full, then conform to a supplied voice sample (§ Voice-match).
|
|
97
|
+
|
|
98
|
+
**Excluded by design (do NOT build or invoke):**
|
|
99
|
+
|
|
100
|
+
- **Detector-evasion / anti-detector mode** — rewriting to defeat an
|
|
101
|
+
AI-text classifier. Conflicts with the media/disclosure transparency
|
|
102
|
+
floors ([`media-governance-routing`](../../rules/media-governance-routing.md),
|
|
103
|
+
the ghostwriter disclosure footer). Goal is prose that reads human
|
|
104
|
+
because the tells are gone, never prose engineered to fool a detector.
|
|
105
|
+
- **A shipped ML detector.** No runtime ML-classifier dependency
|
|
106
|
+
(no-new-runtime-dependency constraint). Deterministic
|
|
107
|
+
`detect_ai_tells.ts` is the only checker that ships. The score →
|
|
108
|
+
rewrite → re-score loop shape is kept only as an **optional
|
|
109
|
+
bring-your-own-checker** step: if the operator supplies a checker
|
|
110
|
+
command, the loop may call it with an audit trail; absent one, the
|
|
111
|
+
step-3 audit + step-6 self-check degrade gracefully. The suite never
|
|
112
|
+
ships the checker.
|
|
113
|
+
|
|
114
|
+
## Voice-match — six fixed signals, not a vibe
|
|
115
|
+
|
|
116
|
+
When a voice sample is supplied (`--voice`, a profile fingerprint), extract a
|
|
117
|
+
small **fixed signal set** and match against it, not an impression:
|
|
118
|
+
|
|
119
|
+
1. **Sentence-length rhythm** — the short/long alternation pattern.
|
|
120
|
+
2. **Vocabulary register** — plain / technical / formal / colloquial.
|
|
121
|
+
3. **Punctuation habits** — dash use, parentheticals, semicolons, ellipses.
|
|
122
|
+
4. **Hedging density** — how often the author qualifies a claim.
|
|
123
|
+
5. **Structural cadence** — paragraph length, list vs prose preference.
|
|
124
|
+
6. **Idiom** — recurring phrases, era-bound references, signature asides.
|
|
125
|
+
|
|
126
|
+
Two distinct voice samples produce measurably different targets on these six
|
|
127
|
+
axes; matching means moving the draft toward the sample's values, never
|
|
128
|
+
inventing personality the sample does not show.
|
|
129
|
+
|
|
130
|
+
## Principles (non-negotiable)
|
|
131
|
+
|
|
132
|
+
- **Subtract, don't add.** AI tone is a *residue to remove*, not warmth to
|
|
133
|
+
add. Adding warmth adds sycophancy — the loudest AI tell (wire to
|
|
134
|
+
[`direct-answers`](../../rules/direct-answers.md) Iron Law 1: no flattery).
|
|
135
|
+
Humanizing lowers the AI signal; never raises the agreeableness.
|
|
136
|
+
- **Style and stance are separate.** A request for a humanized *voice* is
|
|
137
|
+
not a request for *agreement*. Preserve disagreement, uncertainty,
|
|
138
|
+
hedged-because-genuinely-uncertain claims, and refusals **regardless of
|
|
139
|
+
intensity level** — a pass that softens a "no" into a "maybe" has
|
|
140
|
+
corrupted the stance, not the style. When the input takes a position or
|
|
141
|
+
declines, the rewrite keeps that position or declining, in plainer words.
|
|
69
142
|
|
|
70
143
|
## Guards (non-negotiable)
|
|
71
144
|
|
|
@@ -144,4 +217,7 @@ human voice there; don't inject personality or restructure.
|
|
|
144
217
|
|
|
145
218
|
Pattern catalog root source: Wikipedia, "Signs of AI writing" (WikiProject
|
|
146
219
|
AI Cleanup) — catalog wording in `data/patterns.md` authored fresh
|
|
147
|
-
for this suite.
|
|
220
|
+
for this suite. Severity tiers + self-validation thresholds:
|
|
221
|
+
[`references/anti-aiisms.md`](references/anti-aiisms.md). Worked fixtures
|
|
222
|
+
for stance-preservation and voice-match:
|
|
223
|
+
[`references/fixtures.md`](references/fixtures.md).
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# AI-ism severity tiers + self-validation thresholds
|
|
2
|
+
|
|
3
|
+
> On-demand reference for the [`humanizer`](../SKILL.md) skill
|
|
4
|
+
> (road-to-ecosystem-harvest-prose-authenticity, Source I — a prose
|
|
5
|
+
> anti-slop humanizer skill; provenance in the harvest index). Loaded only
|
|
6
|
+
> during an active humanize pass. Five **pattern groups** live in
|
|
7
|
+
> [`../data/patterns.md`](../data/patterns.md); this file adds the
|
|
8
|
+
> orthogonal **severity axis** (how reliable a tell each construction is)
|
|
9
|
+
> and the **self-validation thresholds** the deterministic self-check reads.
|
|
10
|
+
>
|
|
11
|
+
> Every threshold here is a **default, not a suite measurement** — a
|
|
12
|
+
> starting bound with its source, tunable per voice, never a validated
|
|
13
|
+
> claim about human prose.
|
|
14
|
+
|
|
15
|
+
## Why a severity axis (orthogonal to the group taxonomy)
|
|
16
|
+
|
|
17
|
+
`patterns.md` groups tells by *kind* (content / language / style /
|
|
18
|
+
communication / filler). This file grades them by *diagnostic weight* — how
|
|
19
|
+
much a single occurrence tells you. Rewrite discipline is the same
|
|
20
|
+
(rewrite, don't delete); the tier decides **how hard to look** and **whether
|
|
21
|
+
one hit is worth acting on**. Clusters still win: two Medium tells
|
|
22
|
+
co-occurring outweigh one isolated High.
|
|
23
|
+
|
|
24
|
+
## Tier High — almost always a tell (act on a single occurrence)
|
|
25
|
+
|
|
26
|
+
Single instance is strong evidence of machine authorship; these rarely
|
|
27
|
+
survive in genuine human prose.
|
|
28
|
+
|
|
29
|
+
- **Chat artifacts** in a deliverable — "I hope this helps", "Let me know
|
|
30
|
+
if…", "Would you like me to…", "Here is an overview of…". (patterns.md 4.1)
|
|
31
|
+
- **Knowledge-cutoff disclaimers** — "As of my last update…", "While
|
|
32
|
+
specific details are limited…". (4.2)
|
|
33
|
+
- **Sycophancy** — "Great question!", "You're absolutely right". (4.4)
|
|
34
|
+
- **Negative parallelism as a reflex** — "It's not just X — it's Y", "not
|
|
35
|
+
merely a song, but a statement". (2.3)
|
|
36
|
+
- **Significance inflation** — "marks a pivotal moment", "leaves an
|
|
37
|
+
indelible mark". (1.1)
|
|
38
|
+
- **Aphorism formulas** — "X is the currency of Y", "X is not a tool but a
|
|
39
|
+
mirror". (3.9)
|
|
40
|
+
- **Spaced double hyphens** (` -- `) — always a machine artifact. (3.1)
|
|
41
|
+
|
|
42
|
+
## Tier Medium — a tell in combination (act when ≥2 co-occur)
|
|
43
|
+
|
|
44
|
+
Individually defensible; a cluster of two or more is a signature.
|
|
45
|
+
|
|
46
|
+
- **AI vocabulary** — delve, tapestry, showcase, testament, pivotal,
|
|
47
|
+
vibrant, intricate, seamless, underscore, ever-evolving. One is noise;
|
|
48
|
+
three in a paragraph is a confession. (2.1)
|
|
49
|
+
- **Rule-of-three padding** — forced triplets. (2.4)
|
|
50
|
+
- **Copula avoidance** — "serves as", "stands as", "represents a shift". (2.2)
|
|
51
|
+
- **Promotional register** — "nestled", "boasts", "rich cultural heritage". (1.4)
|
|
52
|
+
- **Superficial "-ing" analysis** — "…, highlighting the region's heritage". (1.3)
|
|
53
|
+
- **Weasel attributions** — "experts argue", "observers have cited". (1.5)
|
|
54
|
+
- **Staccato drama / manufactured punchlines** — runs of short fragments
|
|
55
|
+
engineered for quotability. (3.8)
|
|
56
|
+
- **Em/en-dash density above the deliverable cap** (~2 per 500 words). (3.1)
|
|
57
|
+
- **Signposting** — "let's dive in", "here's what you need to know". (5.4)
|
|
58
|
+
- **Fake-candid openers** — "Honestly?", "Look,", "Here's the thing". (5.6)
|
|
59
|
+
|
|
60
|
+
## Tier Low — only when over-used (never act on isolated hits)
|
|
61
|
+
|
|
62
|
+
Common in ordinary human writing; a tell only at high density.
|
|
63
|
+
|
|
64
|
+
- **Filler phrases** — "in order to", "due to the fact that". (5.1)
|
|
65
|
+
- **Hedge stacks** — "could potentially possibly". (5.2)
|
|
66
|
+
- **Mechanical boldface / bold-header vertical lists** — a tell in chat/post
|
|
67
|
+
prose; **house style in this repo's own docs** (see the scope note below). (3.2, 3.3)
|
|
68
|
+
- **Title Case Headings**, **curly quotes**, **generic upbeat endings**. (3.4, 3.6, 5.3)
|
|
69
|
+
- **Synonym cycling**, **false ranges**. (2.5, 2.6)
|
|
70
|
+
|
|
71
|
+
## Scope note — deliverables, not repo docs
|
|
72
|
+
|
|
73
|
+
This severity axis governs **deliverable prose** (posts, articles, ghostwriter
|
|
74
|
+
output, on-request README sections). It does **not** apply to this repo's own
|
|
75
|
+
`docs/**` reference prose: em dashes and bold inline headers are the suite's
|
|
76
|
+
**intentional house style** there (council 2026-07-11, recorded on
|
|
77
|
+
`detect_ai_tells.ts` and `road-to-humanized-writing`). A humanize pass never
|
|
78
|
+
runs over repo documentation — see SKILL.md § When NOT to use.
|
|
79
|
+
|
|
80
|
+
## Self-validation thresholds (U4 — deterministic self-check bounds)
|
|
81
|
+
|
|
82
|
+
Read after a rewrite; each bound is a **default, not a suite measurement**.
|
|
83
|
+
The deterministic subset is enforced by
|
|
84
|
+
[`detect_ai_tells.ts`](../../../scripts/detect_ai_tells.ts) when a runtime is
|
|
85
|
+
available; without one, the step-3 audit checks these by eye.
|
|
86
|
+
|
|
87
|
+
| Bound | Default | Source |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| Em/en-dash density | ≤ ~2 per 500 words | patterns.md 3.1 (CP1 parity with design-antipatterns) |
|
|
90
|
+
| Consecutive staccato fragments | ≤ 3 short declaratives in a row | patterns.md 3.8 |
|
|
91
|
+
| Uniform-shape bullets | merge a run of ≥ 4 identically-shaped `- **X:** …` bullets into prose or real sentences | patterns.md 3.3 |
|
|
92
|
+
| Hedge stack | ≤ 1 hedge per claim | patterns.md 5.2 |
|
|
93
|
+
| Stock-vocabulary density | ≤ 2 Tier-Medium AI-vocabulary words per 100 words | patterns.md 2.1 |
|
|
94
|
+
|
|
95
|
+
**Did the rewrite clear the flagged tells without introducing new ones?** A
|
|
96
|
+
re-run over already-clean prose is a no-op. If a bound is intentionally
|
|
97
|
+
exceeded by a voice fingerprint (a person who genuinely writes in dashes),
|
|
98
|
+
the fingerprint wins and the bound is suppressed for that pass.
|
|
99
|
+
|
|
100
|
+
## Factual-integrity guard (U4)
|
|
101
|
+
|
|
102
|
+
Where a rewrite touches factual content — a number, date, name, quantity, or
|
|
103
|
+
claim — emit a flag rather than silently altering it:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
[VERIFY: <original span> → <rewritten span>]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
A humanizing pass changes *how* something is said, never *what is true*. The
|
|
110
|
+
flag makes any factual delta reviewable; the author confirms or reverts. A
|
|
111
|
+
rewrite that would drop or alter a fact without a `[VERIFY:]` flag is a
|
|
112
|
+
defect, not a style improvement.
|