Skip to content
cccskills
FreePublished on GitHub

license-compliance-audit

Run the offline (jscpd) and online (scanoss-py) similarity scanners on demand against a diff or path — the ONLY home of this repo's detection capability; no CI gate exists or ever ran it automatically

The English summary is being prepared. Showing the original description.

See how to install

Files included (2)

  • SKILL.md7.4 KB
  • evals/triggers.json2.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

license-compliance-audit

Gate G0 (road-to-provenance-and-license-governance, Phase 0) measured both candidate similarity detectors against a frozen golden corpus and neither met the pre-registered bar for a CI gate. Council resolved (2026-07-28, Option A): no lint_code_provenance.ts in any form — not even advisory. This skill is the result of that decision: the scan capability that used to be a planned CI gate now exists only as something a human invokes deliberately, so every hit gets investigated because a human asked for it — never as a silent pipeline signal nobody reads.

When to use

  • Before merging a diff that looks suspiciously similar to something you've seen elsewhere, or that a reviewer flagged.
  • During a periodic self-audit (e.g. the Phase-4 "run the full pipeline on this repo" dogfood exercise).
  • A reviewer or the origin: uncertain self-flag from code-provenance names a residual-class file worth a closer look.

Do NOT use when:

  • You expect this to run automatically in CI — it does not, by explicit council decision; nothing here is wired into any pipeline.
  • You expect a clean result to prove the code was not copied — it cannot; see the scope bound below.
  • You already have a specific, known source to check against a specific license — that's license-compliance-borrow-check, a targeted one-source check, not a corpus-wide scan.

Procedure

  1. Inspect available tooling. The offline layer (L-1) is always available via npx:
    npx jscpd --version
    
    The online layer (L0) is optional — check whether it is installed and reachable:
    scanoss-py --version   # or: pip show scanoss
    
    Offline-only is expected and fine in most environments; report it honestly rather than treating it as a failure.
  2. Run the offline scan (L-1) against the target path or diff:
    npx jscpd <path> --min-tokens 25
    
    --min-tokens 25 is the pre-registered shipping value — the best false-positive-clean point of the S0.3 sweep (internal/bench/provenance/reports/baseline-2026-07-28.md). Read every reported clone pair as a candidate, never a verdict.
  3. If L0 is reachable, run the fingerprint scan:
    scanoss-py scan <path>
    
    Only WFP fingerprints leave the machine, never raw source (privacy by construction, principle 7). If L0 is unreachable, rate-limited, or not installed, report the result as partial (offline) explicitly — never claim a full two-layer scan ran.
  4. Investigate every hit manually. For each match: is the matched file already in provenance/borrows.jsonl (cleared)? Does it read like independent convergence on a common algorithm shape, or an unattributed real copy? Open both files side by side before deciding — a match id is a starting point, not a conclusion.
  5. Route unresolved hits. A hit with no existing ledger entry and no independent-convergence explanation routes to license-compliance-borrow-check to classify and draft the entry. Never clear a hit yourself by simply deciding it's fine.
  6. Report the scope bound alongside every result (see below) — a clean run means "nothing matched this KB/corpus at this sensitivity", never "no copying happened".

What the measured numbers mean — and don't

On the frozen synthetic corpus (internal/bench/provenance/, 36 files, content-sha256 dbbc84a7…34bb3):

layerverbatim+rename recallrename-only recallfalse positives
L-1 jscpd --min-tokens 2510/164/80/12
L0 scanoss4/160/82/12
union (both layers)12/164/82/12

Full source: internal/bench/provenance/reports/baseline-2026-07-28.md.

  • Scope bound: the corpus is synthetic-canonical — independently authored implementations of well-known algorithm shapes, never fetched or pasted from any upstream file. This measures transformation-depth sensitivity and false-positive rate on independent code — it does not measure recall against SCANOSS's real-OSS knowledge base. No sample here is indexed anywhere, so a KB lookup returning zero hits says nothing about the detector's real-world recall. Real-KB recall is unmeasured and would need a second, real-snippet corpus.
  • Rename-only laundering is not reliably caught — 0/8 (SCANOSS), 4/8 (jscpd). The provenance ledger, not this scan, is the anti-launder control (see code-provenance).
  • No tool sees model training data. Unconscious reproduction from training data is not addressed by this scan at all, regardless of outcome.

Output format

  1. Per scan target: which layer(s) actually ran, hit or clean, and — if the online layer was unreachable — the explicit partial (offline) marker (never a silent green presented as a full scan).
  2. For every hit: the matched file/snippet, a manual same-shape-vs-real-copy judgment, and the routing decision (already ledgered / route to license-compliance-borrow-check / independent convergence, no action).
  3. The scope-bound paragraph from the section above, restated so the requester never reads a clean result as a copying guarantee.

Gotcha

  • A clean scan is not proof of originality. It means "nothing matched at this sensitivity, in this corpus/KB" — never "not copied from training data".
  • Rename-only copies routinely pass both layers. Do not trust a clean re-scan after a purely cosmetic rewrite as evidence of real transformation.
  • Both of SCANOSS's measured false positives came from independently authored files matching on convergent canonical-algorithm shape (MIT snippet matches) — a hit is an investigation trigger, not an accusation.
  • Nothing here is wired into CI. A hit found by this skill never blocked anything automatically; if you expected a pipeline signal, there isn't one — that's the point of Gate G0's Option A resolution.

Do NOT

  • NEVER claim or imply this scan runs in CI — it explicitly does not, by council decision (Gate G0, Option A).
  • NEVER report a scan as complete when the online layer was unreachable — always say partial (offline).
  • NEVER present a clean result as "provably not copied" — restate the scope bound every time a result is shared.
  • NEVER clear a hit without either a ledger entry or a documented independent-convergence judgment.

See also

  • code-provenance — the rule that makes the ledger, not this scan, the primary anti-launder control.
  • license-compliance-borrow-check — where an unresolved hit routes for classification + ledger drafting.
  • internal/bench/provenance/reports/baseline-2026-07-28.md — the full measured baseline this skill's numbers are drawn from.
  • docs/CLAIMS.md — claim provenance-detector-transformation-sensitivity (unbacked, carries the same scope bound).

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 18, 2026

See all skills by event4u-app

Report a problem with this skill