Skip to content

Commit 343bd04

Browse files
PeliCopilot
authored andcommitted
Document SDK heredoc permission blocker and stop on denial
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 5e9fa27 commit 343bd04

5 files changed

Lines changed: 20 additions & 3 deletions

File tree

‎.github/workflows/rig-skill-integration.lock.yml‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎.github/workflows/rig-skill-integration.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ typechecking, directory creation, or other bootstrap commands for this fixture.
8080
Inherit `COPILOT_SDK_URI` and `COPILOT_CONNECTION_TOKEN`; do not inspect or print
8181
them, start a second server, or use `--server`. If the Node launch fails, report
8282
its exact command and error and stop without retrying model calls.
83+
If that launch is denied, do not repeat or reformulate the Bash command:
84+
call `report_incomplete` immediately. The one-invocation limit includes denials.
8385
8486
The scenario makes exactly three Rig model calls: clarity, safety, and feasibility
8587
judgments of the same harmless dummy request. TypeScript owns orchestration and
@@ -124,6 +126,8 @@ After the Node launch succeeds, read the result JSON using a file-reading tool
124126
and call `noop` with a brief summary of the three judgments and majority verdict.
125127
Do not invoke Bash again to read or validate the result: the post-step owns
126128
validation. Success requires no repository write. If the launcher,
127-
SDK, schema validation, or expected verdict fails, report the exact error and
128-
stop. Do not fabricate results, modify the fixture, or retry model calls. The
129+
SDK, schema validation, or expected verdict fails, report the exact error with
130+
`report_incomplete` and stop. Never call `noop` on failure. A rejected standalone Node heredoc
131+
is a permission-parser failure, not evidence that Node or the SDK is missing.
132+
Do not fabricate results, modify the fixture, or retry model calls. The
129133
post-step fails the workflow when the result file is missing or invalid.

‎skills/rig/runtime.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ disallowed preparation command. Inherit SDK environment variables without
7272
runs, remove that command and use the permitted standalone Node launch; do not
7373
claim that Bash is unavailable. If the launcher itself fails, report its exact
7474
error and respect the workflow's retry policy.
75+
76+
GitHub Agentic Workflows v0.91.1's Copilot SDK permission parser treats heredoc
77+
body lines as shell commands. It can therefore reject a valid standalone
78+
`node` launch despite `bash: ["node"]`. If this happens, report the exact denial
79+
as a workflow permission-parser limitation, not a missing Node runtime or SDK.
80+
Do not broaden the shell allowlist or encode the program to evade enforcement.
81+
The workflow host needs a heredoc-aware permission parser before this inline
82+
launch pattern can run in that SDK driver.
83+
7584
This reduces tool configuration, not sandbox permissions: allowing arbitrary
7685
Node code still permits filesystem and subprocess operations. Add commands
7786
required by the program's own tool calls separately.

‎src/rig-skill-workflow.test.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ describe("Rig skill agentic workflow", () => {
8585
expect(markdown).toContain("already exists, and Node.js and SDK dependencies are already provisioned");
8686
expect(markdown).toContain("Do not use Python");
8787
expect(markdown).toContain("Do not invoke Bash again");
88+
expect(markdown).toContain("Never call `noop` on failure");
89+
expect(markdown).toContain("The one-invocation limit includes denials");
8890
});
8991

9092
it("runs the actual workflow fence with exactly three small SDK calls", async () => {

‎src/skill.test.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ it("requires direct Node launch without shell preparation", () => {
4141
const runtime = readFileSync(resolve(skillRoot, "runtime.md"), "utf8");
4242
expect(runtime).toContain("`/tmp/gh-aw/agent` is already provisioned");
4343
expect(runtime).toContain("prevalidated fixture, skip lint and typecheck");
44+
expect(runtime).toContain("permission parser treats heredoc");
45+
expect(runtime).toContain("Do not broaden the shell allowlist");
4446
});
4547

4648
it("exposes the same public modules from the standalone skill and repository", () => {

0 commit comments

Comments
 (0)