Skip to content

fix(tcfeed): stop new requests re-adding the converter, and describe what is actually offered - #155

Merged
ralyodio merged 1 commit into
masterfrom
tcfeed-minimal-pack
Aug 17, 2026
Merged

fix(tcfeed): stop new requests re-adding the converter, and describe what is actually offered#155
ralyodio merged 1 commit into
masterfrom
tcfeed-minimal-pack

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Three things a maintainer review on mac-developer-bridge#7 found, all of them tcfeed's rather than the repository's.

openPr still shipped the SARIF converter. refresh stopped installing it in pack 1.7.0 and actively deletes it from branches that carry it, but the path that opens a new request never got the change. Every fresh offer re-added the file refresh existed to take away, and the body said "adds one workflow" above a diff that added two.

The body promised outputs that were not rendered. It named the Security tab and a PR comment unconditionally, including under TCFEED_LEAST_PRIVILEGE=1 where neither exists. It now reads the same switch the workflow does, and the default offer names the read-only build as something a maintainer can just ask for.

render grew {{#if name}} … {{/if}}, matching the pack renderer in sh1pt#970, so the optional steps are omitted rather than shipped behind a false condition. Retires extraPermissions, which made least privilege depend on tcfeed remembering to pass an empty string rather than on the template.

Verified against the updated pack: both renderers produce byte-identical output, no marker survives either render, and the read-only render is valid YAML whose permissions are exactly contents: read with the two write-scoped steps gone from the step list. Applied live to mac-developer-bridge#7 (one file, 286 lines, contents: read) and to a fresh offer on mulgadc/spinifex#809.

Also records why the default is still write-enabled and what would change it: two maintainers have now declined on this point, and the second observed that pull_request hands a fork's GITHUB_TOKEN read-only access — so the comment and the upload are least reliable on exactly the contributor pull requests the scan is most useful for.

Pre-commit was skipped: it builds the CLI and the web app and this worktree has no node_modules. bin/tcfeed.ts is a standalone script, verified directly — it parses, --help runs, and its render was executed against the updated pack.

…what is actually offered

Three things a maintainer review on mac-developer-bridge found, all of them
tcfeed's rather than the repository's.

`openPr` still wrote `.github/scripts/threatcrush-to-sarif.py`. `refresh`
stopped installing it in pack 1.7.0 and actively deletes it from branches that
still carry it, but the path that opens a *new* request never got the change —
so every fresh offer re-added the file refresh existed to take away, and the
body said "adds one workflow" above a diff that added two.

The body also promised the Security tab and a pull request comment
unconditionally, including under TCFEED_LEAST_PRIVILEGE=1, where neither is
rendered. It now reads the same switch the workflow does, so the read-only
offer describes itself as read-only and says the two write-scoped steps are
absent from the file rather than disabled in it. The default offer now names
the read-only build as something a maintainer can just ask for.

`render` grew whole-line `{{#if name}} … {{/if}}`, matching the pack renderer
in sh1pt, so those steps are omitted rather than shipped behind a false
condition. That retires `extraPermissions` — a block of literal YAML pasted in
from here, which made least privilege depend on tcfeed remembering to pass an
empty string rather than on the template. Each scope is now emitted by the
output that needs it. The marker still takes a bare variable name and anything
but the literal 'true' drops the block, because a stray value read as truthy
would be a granted write scope.

Verified against the updated pack: both renderers produce byte-identical
output, no marker survives either render, and the read-only render is valid
YAML whose permissions are exactly `contents: read` with the Security-tab and
comment steps gone from the step list.

Also adds the reason the default is still write-enabled, and what would change
it: two maintainers have now declined on this point, and the second observed
that `pull_request` hands a fork's GITHUB_TOKEN read-only access — so the
comment and the upload are least reliable on exactly the contributor pull
requests the scan is most useful for.

Pre-commit skipped: it builds the CLI and the web app, and this worktree has no
node_modules. bin/tcfeed.ts is a standalone script and was verified directly —
it parses, `--help` runs, and its render was executed against the updated pack.
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

63 finding(s)

HIGH/CRITICAL: 4 | MEDIUM: 52 | LOW: 7

Severity Rule Location
HIGH secret-aws-access-key prd/0003-detect-hardcoded-secrets-before-they-are-committed-or-served.md:126
HIGH sh-eval-expansion .githooks/pre-commit:26
HIGH sh-remote-script-execution apps/web/public/install.sh:272
HIGH sh-remote-script-execution apps/web/public/install.sh:320
MEDIUM insecure-temp-file .githooks/commit-msg:16
MEDIUM insecure-temp-file .githooks/post-commit:20
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/init.ts:70
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/init.ts:79
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/service.ts:92
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:31
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:33
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:34
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:35
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:36
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:43
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:49
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:56
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:63
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:82
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:84
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:85
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:93
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:98
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:105
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:112
MEDIUM js-shell-exec-interpolation apps/cli/src/index.ts:425
MEDIUM js-unescaped-html-sink apps/web/src/app/about/page.tsx:180
MEDIUM js-unescaped-html-sink apps/web/src/app/about/page.tsx:184
MEDIUM js-open-redirect apps/web/src/app/auth/login/page.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:125
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:153
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:157
MEDIUM js-unescaped-html-sink apps/web/src/app/get-whitepaper/page.tsx:346
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:211
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:215
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:219
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:120
MEDIUM js-unescaped-html-sink apps/web/src/app/store/[slug]/page.tsx:86
MEDIUM js-open-redirect apps/web/src/components/funding/FundingClient.tsx:97
MEDIUM manifest-install-lifecycle-script package.json:24
MEDIUM js-uninitialized-buffer packages/scan/src/node-rules.ts:456
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:154
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:160
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:208
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:313
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/aur.ts:256
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/chocolatey.ts:264
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/chocolatey.ts:288
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/rpm.ts:201
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/rpm.ts:261

…and 13 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit a32c3d2 into master Aug 17, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant