[claude-hackernews] Reply draft: BetterClaw Show HN, workflow-shape vs invariant-shape (id=47973502)#46
[claude-hackernews] Reply draft: BetterClaw Show HN, workflow-shape vs invariant-shape (id=47973502)#46NiveditJain wants to merge 1 commit intomainfrom
Conversation
…riant-shape (id=47973502)
📝 WalkthroughWalkthroughA new Markdown draft file ChangesDraft Reply Documentation
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Review rate limit: 4/5 reviews remaining, refill in 12 minutes. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@drafts/2026-05-04T031239Z.md`:
- Around line 24-30: Add a language tag to the fenced code block containing the
quoted paragraph to satisfy markdownlint MD040: replace the opening triple
backticks with a language-specified fence (e.g., ```text) for the block that
starts with "(disclosure: I work on FailProof AI..." so the parser recognizes it
as a code/quote block and the linter stops flagging MD040.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 06beeeea-eec7-4e5c-9abc-6fb93c19f7aa
📒 Files selected for processing (1)
drafts/2026-05-04T031239Z.md
| ``` | ||
| (disclosure: I work on FailProof AI: https://github.com/exospherehost/failproofai) | ||
|
|
||
| The paragraph -> graph compile reads cleanly for bounded workflows like the "diagnose, do not modify" example. The harder case is exploratory work where the path can't be pre-described: debugging unfamiliar code, refactoring across files, anything with branching uncertainty. The graph then has to be permissive enough to allow legitimate exploration (and stops gating much) or strict enough that every off-path tool call needs a human re-compile. | ||
|
|
||
| A second axis of the same problem is invariant-shaped rather than workflow-shaped: "never DROP DATABASE on a prod connection string, regardless of which step the agent thinks it's on." Those resist the graph model because they're orthogonal to the task. They land more naturally as PreToolUse predicates that match on tool-input shape, not workflow position. The two layers feel complementary: paragraph-graph for "what should this run do," predicates for "what should the agent never do." | ||
| ``` |
There was a problem hiding this comment.
Add a language tag to the fenced reply block (Line 24).
This triggers markdownlint MD040 and is a quick fix.
Suggested patch
-```
+```text
(disclosure: I work on FailProof AI: https://github.com/exospherehost/failproofai)
The paragraph -> graph compile reads cleanly for bounded workflows like the "diagnose, do not modify" example. The harder case is exploratory work where the path can't be pre-described: debugging unfamiliar code, refactoring across files, anything with branching uncertainty. The graph then has to be permissive enough to allow legitimate exploration (and stops gating much) or strict enough that every off-path tool call needs a human re-compile.
A second axis of the same problem is invariant-shaped rather than workflow-shaped: "never DROP DATABASE on a prod connection string, regardless of which step the agent thinks it's on." Those resist the graph model because they're orthogonal to the task. They land more naturally as PreToolUse predicates that match on tool-input shape, not workflow position. The two layers feel complementary: paragraph-graph for "what should this run do," predicates for "what should the agent never do."</details>
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.22.1)</summary>
[warning] 24-24: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against the current code and only fix it if needed.
In @drafts/2026-05-04T031239Z.md around lines 24 - 30, Add a language tag to the
fenced code block containing the quoted paragraph to satisfy markdownlint MD040:
replace the opening triple backticks with a language-specified fence (e.g.,
so the parser recognizes it as a code/quote block and the linter stops flagging
MD040.
Summary
Draft reply on Show HN: BetterClaw - Compile a paragraph into a workflow that gates agent tools (id=47973502, 2 points, 0 comments, 2 days old, reply form open). BetterClaw is a tool-call gate built on a paragraph-to-graph compile that allowlists per node; OP explicitly solicits design feedback. Reply engages substantively on the design axis (workflow-bounded vs invariant-bounded gates) and notes the two layers as complementary, not competing.
Status: draft (pending manual post by user from chosen account).
Discovery path
browser-useCLI (MCP launch-order trap surfaced; fell back to CLI perINSTRUCTIONS.md)./ask(no fit) ->/show(most adjacent items already in flight under open PRs) -> Algolia search UIhttps://hn.algolia.com/?q=claude+code+hooks&type=story&dateRange=pastWeek-> BetterClaw surfaced as a Show HN explicitly soliciting design feedback in the same problem space.drafts/,comments/, and open PRs: clean.Thread
infamous-ovenOP cites the PocketOS / Railway DB-deletion incident as motivating example, and explicitly asks: paragraph vs DSL? where does it fall down (multi-step, loops, sub-agents)? what other agent runtimes? Reply addresses the second question (where it falls down) with a typology argument: workflow-bounded gates handle "what should this run do," invariant-bounded predicates handle "what should the agent never do, ever." The two layers compose; they don't compete.
Reply payload (committed at
drafts/2026-05-04T031239Z.md)149 words. ASCII-only punctuation (no em-dashes, en-dashes, fancy ellipses, curly quotes, unicode arrows). Single disclosure-line link to the FailProof repo (no trailing repo-link, no install commands, no comma-listed policy names, no dashboard plug, no version-number talk - matches the working-shape rules in
INSTRUCTIONS.md).Test plan
Summary by CodeRabbit
Release Notes
Note: This release contains no user-facing changes.