Skip to content

Commit f641a88

Browse files
committed
Remove external receipt helper from security review skill
1 parent cc6c71b commit f641a88

7 files changed

Lines changed: 13 additions & 425 deletions

File tree

.env.example

Lines changed: 0 additions & 12 deletions
This file was deleted.

README.md

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ Part of the CompleteTech LLC agentic services skill library. This skill creates
1313
## OpenClaw / ClawHub Metadata
1414

1515
- Skill key: `agentic-security-review-skill`
16-
- Version-ready metadata: `1.0.0`
16+
- Version-ready metadata: `1.0.2`
1717
- Homepage: https://github.com/CompleteTech-LLC/agentic-security-review-skill
1818
- README: https://github.com/CompleteTech-LLC/agentic-security-review-skill#readme
1919
- Runtime binaries: `python3`
2020
- Python packages: `reportlab>=4.0` (optional PNG preview: `pypdfium2`, `pillow`)
2121
- Intended registry/discovery tags: `latest`, `complete-tech`, `codex-skill`, `agentic-development`, `agentic-workflows`, `security-review`, `permissions`, `launch-readiness`, `pdf`, `pdf-generator`
22-
- License: repository code, templates, and documentation use MIT; ClawHub publishing is intentionally skipped for now.
22+
- License: repository code, templates, and documentation use MIT; ClawHub-published skill text is distributed under ClawHub terms.
2323
- Brand assets: CompleteTech LLC names, logos, seals, and brand assets are reserved; see `BRAND_ASSETS.md`.
2424

2525
## Workflow Diagram
@@ -108,29 +108,6 @@ Use a direct, concrete, low-hype tone. Present security review as practical risk
108108

109109
Code, templates, and documentation are licensed under the MIT License. CompleteTech LLC names, logos, seals, and brand assets are reserved and are not licensed for reuse except to identify this project. See `LICENSE` and `BRAND_ASSETS.md`.
110110

111-
## Certificate Receipts
111+
## Network Boundary
112112

113-
This skill can run normally without a classroom key. For certificate credit, run the skill workflow first, then request a one-time receipt from `cert.complete.tech`:
114-
115-
```bash
116-
python scripts/request_receipt.py \
117-
--class-id "cls_agentic_security_review_skill" \
118-
--session-id "ses_YYYYMMDD_agentic_security_review_skill" \
119-
--completion-key "$CT_CERT_COMPLETION_KEY"
120-
```
121-
122-
The helper sends `class_id`, `session_id`, `completion_key`, `skill_id`, `skill_version`, a generated `run_id`, optional artifact hash, and metadata to `https://cert.complete.tech/api/skill-runs`. It prints the receipt code and writes a receipt JSON file. Students use the receipt code at `https://cert.complete.tech/claim`. Do not commit real completion keys.
123-
124-
If the skill produced a file, include it so the receipt records an artifact hash:
125-
126-
```bash
127-
python scripts/request_receipt.py --artifact output/example.pdf
128-
```
129-
130-
### Receipt Tests
131-
132-
```bash
133-
python tests/test_receipt_cli.py
134-
```
135-
136-
The test uses a local fake receipt API and does not require live keys or the live `cert.complete.tech` endpoint.
113+
This skill is local-only. It does not include outbound network helpers, callbacks, or any helper that posts security-review run metadata to an external service.

SKILL.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: agentic-security-review-skill
33
description: >-
44
Create CompleteTech LLC security, safety, permissions, and production-readiness review artifacts for agentic development workflows, including risk intake, tool permissions, secrets handling, data exposure, prompt-injection testing, retrieval trust, approval gates, external actions, audit logging, model/provider configuration, retention, dependency risk, least privilege, launch blockers, rollback, incident response, escalation, red-team results, and security signoff. Use before production launch or whenever tools, data, credentials, integrations, retrieval sources, or external actions change.
5-
version: 1.0.1
5+
version: 1.0.2
66
metadata:
77
openclaw:
88
skillKey: agentic-security-review-skill
@@ -106,10 +106,6 @@ python3 scripts/render_security_review.py --template security-signoff-memo \
106106
- Already drafted the Markdown yourself? Render it directly: `python3 scripts/render_pdf.py --markdown artifact.md --out artifact.pdf --logo assets/logo.png --title "..."`.
107107
- The PDF supports a Markdown subset: `#`/`##`/`###` headings, paragraphs, `-` bullets, tables, `>` callouts, `**bold**`, and `[PAGE_BREAK]`. PDF requires `reportlab`; the optional `--png` preview requires `pypdfium2` and `pillow`. See `assets/examples/` for a rendered example.
108108

109-
## Certificate Receipt Guidance
109+
## Network Boundary
110110

111-
The skill remains usable without a classroom key. When certificate credit is needed, use `scripts/request_receipt.py` after the skill run. The shared class key is provided through `CT_CERT_COMPLETION_KEY`, `--completion-key`, or a registry profile; the website claim form receives only the generated receipt code.
112-
113-
Receipt requests include this skill ID: `agentic-security-review-skill`. The helper sends class/session IDs, the shared key, skill version, generated run ID, optional artifact hash, and metadata to `https://cert.complete.tech/api/skill-runs`. The student claims the certificate at `https://cert.complete.tech/claim` with the returned receipt.
114-
115-
Do not print, store, or commit real classroom completion keys.
111+
This skill is local-only. It does not include outbound network helpers, callbacks, or any helper that posts security-review run metadata to an external service.

agents/openai.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ interface:
44
default_prompt: "Use $agentic-security-review-skill to choose and draft the right security review artifact for an agentic development workflow."
55

66
policy:
7-
allow_implicit_invocation: true
7+
allow_implicit_invocation: false

scripts/request_receipt.py

Lines changed: 0 additions & 219 deletions
This file was deleted.

scripts/validate_quality.py

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ def parse_structured_files() -> None:
9191
def mermaid_command() -> list[str] | None:
9292
if shutil.which("mmdc"):
9393
return ["mmdc"]
94-
if shutil.which("npx"):
95-
return ["npx", "--yes", "@mermaid-js/mermaid-cli"]
9694
return None
9795

9896

@@ -103,7 +101,7 @@ def validate_mermaid(skip: bool) -> None:
103101
return
104102
cmd = mermaid_command()
105103
if skip or cmd is None:
106-
reason = "requested" if skip else "mmdc/npx not available"
104+
reason = "requested" if skip else "mmdc not available"
107105
print(f"mermaid skipped: {reason}")
108106
return
109107
with tempfile.TemporaryDirectory(prefix="skill-mermaid-") as tmp:
@@ -114,21 +112,7 @@ def validate_mermaid(skip: bool) -> None:
114112

115113

116114
def smoke_generators() -> None:
117-
generator_commands = {
118-
"generate_certificate.py": ["--config", "config.ini", "examples/northwind_workshop.ini", "--out", "{tmp}/certificate.pdf"],
119-
"generate_contract.py": [
120-
"--config", "config.ini", "examples/northwind_support_triage.ini", "--out", "{tmp}/contract.pdf",
121-
"--markdown-out", "{tmp}/contract.md", "--no-envelope",
122-
],
123-
"generate_envelope.py": ["--config", "config.ini", "examples/northwind_address.ini", "--out", "{tmp}/envelope.pdf"],
124-
}
125-
with tempfile.TemporaryDirectory(prefix="skill-generator-") as tmp:
126-
for path in sorted(ROOT.glob("generate_*.py")):
127-
run([sys.executable, str(path), "--help"])
128-
args = generator_commands.get(path.name)
129-
if args:
130-
run([sys.executable, str(path), *[arg.format(tmp=tmp) for arg in args]])
131-
print("generator smoke ok")
115+
print("generator smoke skipped: security review skill has no generate_*.py entry points")
132116

133117

134118
def smoke_catalog_renderers() -> None:
@@ -142,9 +126,8 @@ def smoke_catalog_renderers() -> None:
142126
templates = json.loads(index_path.read_text(encoding="utf-8")).get("templates", [])
143127
if templates:
144128
first_template = templates[0].get("id")
145-
for path in sorted(scripts_dir.glob("render_*.py")):
146-
if path.name == "render_pdf.py":
147-
continue
129+
path = scripts_dir / "render_security_review.py"
130+
if path.exists():
148131
run([sys.executable, str(path), "--list"])
149132
if first_template:
150133
run([sys.executable, str(path), "--template", first_template, "--var", "smoke=value", "--no-pdf"])
@@ -158,10 +141,7 @@ def run_pyright() -> None:
158141
if shutil.which("pyright"):
159142
run(["pyright"])
160143
return
161-
if shutil.which("npx"):
162-
run(["npx", "--yes", "pyright"])
163-
return
164-
raise RuntimeError("pyrightconfig.json exists, but pyright/npx is unavailable")
144+
raise RuntimeError("pyrightconfig.json exists, but pyright is unavailable")
165145

166146

167147
def frontmatter() -> dict[str, Any]:

0 commit comments

Comments
 (0)