Skip to content

Commit fe28ca5

Browse files
committed
Clarify delivery runtime permissions
1 parent e26c831 commit fe28ca5

5 files changed

Lines changed: 34 additions & 15 deletions

File tree

.clawhubignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ ENV/
2929

3030
.env
3131
.env.*
32-
!.env.example
3332
secrets.json
3433
*_secret.ini
3534
*_local.ini
3635
*.tmp
36+
scripts/validate_quality.py
3737
.DS_Store
3838
Thumbs.db
3939
desktop.ini

README.md

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

1515
- Skill key: `agentic-delivery-skill`
16-
- Version-ready metadata: `1.0.0`
16+
- Version-ready metadata: `1.0.3`
1717
- Homepage: https://github.com/CompleteTech-LLC/agentic-delivery-skill
1818
- README: https://github.com/CompleteTech-LLC/agentic-delivery-skill#readme
1919
- Runtime binaries: `python3`
20-
- Python packages: `reportlab>=4.0` (optional PNG preview: `pypdfium2`, `pillow`)
20+
- Python packages: `reportlab==4.5.1`, `pyyaml==6.0.3` (optional PNG preview: `pypdfium2==5.8.0`, `pillow==12.2.0`)
2121
- Intended registry/discovery tags: `latest`, `complete-tech`, `codex-skill`, `agentic-development`, `agentic-workflows`, `delivery`, `project-management`, `handoff`, `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; published by CompleteTech on ClawHub.
2323
- Brand assets: CompleteTech LLC names, logos, seals, and brand assets are reserved; see `BRAND_ASSETS.md`.
2424

2525
## Workflow Diagram
@@ -104,6 +104,10 @@ The committed `example.{md,pdf,png}` use curated, realistic demonstration data f
104104

105105
Use a direct, concrete, low-hype tone. Present delivery as practical bounded implementation: execute the approved scope, protect human approval gates, track decisions and risks, verify evaluation examples, document logs and monitoring, prepare reviewers/admins, manage change requests, confirm acceptance, and hand off cleanly. Do not invent client facts, approvals, test results, metrics, regulated-use assurances, legal claims, or production readiness.
106106

107+
## Runtime Permissions
108+
109+
This skill needs local filesystem access only for the documented renderer workflow. It reads bundled templates, references, examples, `assets/logo.png`, and user-provided Markdown or variables, then writes only to the selected `--out`, `--png`, `--markdown-out`, or default `output/` artifact paths. It runs local Python renderer entry points and does not require network access, credential access, persistence, privilege escalation, or destructive file operations.
110+
107111
## License
108112

109113
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`.

SKILL.md

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: agentic-delivery-skill
33
description: >-
44
Create CompleteTech LLC delivery execution artifacts for approved agentic development engagements, including kickoff agendas, access checklists, project plans, milestone trackers, status updates, decision logs, risk/issue logs, change request intake, prototype review, evaluation reports, acceptance packets, launch readiness, monitoring, support, handoff, runbooks, quickstarts, closeout, post-launch review, and escalation procedures. Use after proposal/SOW or contract approval when Codex needs to run bounded agentic workflow delivery cleanly.
5-
version: 1.0.2
5+
version: 1.0.3
66
metadata:
77
openclaw:
88
skillKey: agentic-delivery-skill
@@ -12,9 +12,13 @@ metadata:
1212
- python3
1313
install:
1414
- kind: uv
15-
package: reportlab>=4.0
15+
package: reportlab==4.5.1
1616
- kind: uv
17-
package: pyyaml>=6.0
17+
package: pypdfium2==5.8.0
18+
- kind: uv
19+
package: pillow==12.2.0
20+
- kind: uv
21+
package: pyyaml==6.0.3
1822
---
1923

2024
# Agentic Delivery Skill
@@ -87,6 +91,15 @@ When several artifacts fit, choose the one closest to the operational event. Do
8791
- `references/template-index.json`: machine-readable template metadata used by the renderer.
8892
- `scripts/render_delivery.py`: list delivery artifacts or render a draft with placeholders.
8993

94+
## Runtime Permissions
95+
96+
This skill needs local filesystem access only for its documented renderer workflow:
97+
98+
- Reads bundled templates, references, examples, `assets/logo.png`, and user-provided Markdown or variable inputs.
99+
- Writes only to the user-selected `--out`, `--png`, `--markdown-out`, or default `output/` artifact paths.
100+
- Runs local Python entry points `scripts/render_delivery.py` and `scripts/render_pdf.py`.
101+
- Does not require network access, credential access, persistence, privilege escalation, or destructive file operations.
102+
90103
## Renderer
91104

92105
```bash

requirements.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Branded PDF artifact rendering (scripts/render_pdf.py)
2-
reportlab>=4.0
2+
reportlab==4.5.1
3+
pyyaml==6.0.3
34
# Optional: only needed to also emit a PNG preview montage (scripts/render_pdf.py --png)
4-
pypdfium2>=4.30
5-
pillow>=10.0
5+
pypdfium2==5.8.0
6+
pillow==12.2.0

scripts/validate_quality.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ def run_ruff() -> None:
6060
if shutil.which("ruff"):
6161
run(["ruff", "check", "."])
6262
return
63-
if shutil.which("uvx"):
64-
run(["uvx", "ruff", "check", "."])
65-
return
66-
run([sys.executable, "-m", "ruff", "check", "."])
63+
raise RuntimeError("ruff is required for quality validation")
6764

6865

6966
def compile_python() -> None:
@@ -205,11 +202,15 @@ def publish_candidate_files(patterns: list[str]) -> list[Path]:
205202

206203
def assert_dependency(openclaw: dict[str, Any], package: str) -> None:
207204
installs = openclaw.get("install") or []
208-
packages = {str(item.get("package", "")).split(">=", 1)[0].lower() for item in installs if isinstance(item, dict)}
205+
packages = {package_name(str(item.get("package", ""))) for item in installs if isinstance(item, dict)}
209206
if package.lower() not in packages:
210207
raise RuntimeError(f"metadata.openclaw.install must declare {package}")
211208

212209

210+
def package_name(spec: str) -> str:
211+
return re.split(r"[<>=!~]", spec, 1)[0].strip().lower()
212+
213+
213214
def validate_clawhub_bundle() -> None:
214215
data = frontmatter()
215216
name = data.get("name")

0 commit comments

Comments
 (0)