devrites 3.0.3 → 3.0.5
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/CHANGELOG.md +31 -0
- package/README.md +55 -43
- package/SECURITY.md +72 -58
- package/docs/adr/0001-go-engine-as-control-plane.md +43 -0
- package/docs/adr/0002-dual-host-harness.md +34 -0
- package/docs/adr/0003-gate-model-hitl-pause.md +38 -0
- package/docs/adr/0004-state-schema-phases-sections.md +6 -3
- package/docs/adr/0005-hooks-as-engine-subcommands.md +39 -0
- package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +50 -0
- package/docs/adr/0007-canonical-live-workspace-filenames.md +36 -0
- package/docs/adr/0008-sanctioned-engine-network-boundary.md +33 -0
- package/docs/adr/README.md +58 -0
- package/docs/agents/issue-driven-rites.md +5 -5
- package/docs/architecture.md +61 -45
- package/docs/capability-surface-selection.md +3 -1
- package/docs/cli.md +9 -2
- package/docs/command-map.md +6 -2
- package/docs/engine/agent-contract.md +5 -3
- package/docs/engine/commands.md +27 -14
- package/docs/engine/state-schema.md +14 -9
- package/docs/engine/workspace-schema.md +5 -4
- package/docs/flow.md +18 -7
- package/docs/porting-to-a-new-harness.md +6 -2
- package/docs/release.md +10 -9
- package/docs/skills.md +1 -1
- package/docs/templates/CRITIC_REVIEW_PACKET_TEMPLATE.md +35 -0
- package/docs/usage.md +26 -16
- package/engine/internal/lib/packageexistence.go +729 -52
- package/engine/internal/lib/packageexistence_test.go +343 -0
- package/engine/internal/lib/util.go +1 -1
- package/engine/internal/migrate/migrate.go +16 -11
- package/engine/internal/migrate/migrate_test.go +26 -4
- package/engine/internal/state/feature.go +28 -14
- package/engine/internal/state/schema.go +20 -8
- package/engine/internal/state/state_test.go +6 -6
- package/engine/tests/budget_test.go +2 -2
- package/engine/tests/meta_test.go +3 -3
- package/engine/tests/migrate_cli_test.go +24 -22
- package/pack/.claude/skills/devrites-lib/SKILL.md +7 -9
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +11 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
- package/pack/.claude/skills/rite/SKILL.md +6 -7
- package/pack/.claude/skills/rite/reference/menu.md +5 -5
- package/pack/.claude/skills/rite-adopt/SKILL.md +2 -3
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +7 -9
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +11 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
- package/pack/generated/claude/skills/rite/SKILL.md +6 -7
- package/pack/generated/claude/skills/rite/reference/menu.md +5 -5
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +2 -3
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +7 -9
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +11 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
- package/pack/generated/codex/skills/rite/SKILL.md +6 -7
- package/pack/generated/codex/skills/rite/reference/menu.md +5 -5
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +2 -3
- package/package.json +2 -1
- package/scripts/skills-inventory.mjs +18 -0
- package/scripts/validate-workflow-security.py +3 -8
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
DevRites' publish (release.yml) and auto-merge paths are high-value targets, so this
|
|
5
5
|
gate fails CI when a workflow:
|
|
6
6
|
|
|
7
|
-
- uses
|
|
8
|
-
like `@v2` lets a compromised upstream inject code into the pipeline
|
|
9
|
-
`actions/*` and `github/*` tags are tolerated);
|
|
7
|
+
- uses any non-local action not pinned to a full 40-char commit SHA — a moving
|
|
8
|
+
tag like `@v2` lets a compromised upstream inject code into the pipeline;
|
|
10
9
|
- declares no `permissions:` scope anywhere — the default token is broad;
|
|
11
10
|
- uses `permissions: write-all` (over-broad);
|
|
12
11
|
- uses `pull_request_target`, except for a Dependabot-only workflow that never
|
|
@@ -19,7 +18,6 @@ import os
|
|
|
19
18
|
import re
|
|
20
19
|
import sys
|
|
21
20
|
|
|
22
|
-
FIRST_PARTY = {"actions", "github"} # GitHub-owned; major-tag refs tolerated
|
|
23
21
|
SHA_RE = re.compile(r"^[0-9a-f]{40}$")
|
|
24
22
|
USES_RE = re.compile(r"^\s*-?\s*uses:\s*([^\s#]+)")
|
|
25
23
|
DEPENDABOT_ONLY_RE = re.compile(
|
|
@@ -61,13 +59,10 @@ def scan_text(path, text):
|
|
|
61
59
|
ref = m.group(1)
|
|
62
60
|
if ref.startswith("./") or ref.startswith("."):
|
|
63
61
|
continue # local action
|
|
64
|
-
owner = ref.split("/", 1)[0]
|
|
65
|
-
if owner in FIRST_PARTY:
|
|
66
|
-
continue
|
|
67
62
|
at = ref.rsplit("@", 1)
|
|
68
63
|
pin = at[1] if len(at) == 2 else ""
|
|
69
64
|
if not SHA_RE.match(pin):
|
|
70
|
-
findings.append("%s:%d:
|
|
65
|
+
findings.append("%s:%d: action '%s' not pinned to a full commit "
|
|
71
66
|
"SHA — pin it (a moving tag is a supply-chain risk)"
|
|
72
67
|
% (path, i, ref))
|
|
73
68
|
return findings
|