Dev.to · 9 min read

Is the Spec Optional If the Model Is Free?

Is the Spec Optional If the Model Is Free?

Is the spec optional if the model is free? I keep seeing that assumption in pull requests. A free coding model shows up in the workflow. A free remote server shows up beside it. Then people drop the checklist without a fight. Why write a failing test for a cheap loop? Just rerun the agent until something compiles, right? That mental model is quietly expensive for teams. Free compute does not purchase a behavioral contract. It only purchases another place to be wrong. This FAQ names five claims I still hear. Each entry has the claim, the evidence, and a corrected model. Then I attach a small artifact you can run. None of this needs paid quotas I will not invent. Who this is for You already ship product patches with coding agents. You also distrust a fluent chat transcript from agents. You want a workflow that survives a free box vanishing. Skip this path if you need a hard SLA. Skip it if the box will hold production secrets. Skip it if "works on the agent host" is the release bar. The setup I actually mean I am talking about a narrow, boring stack. You can call a coding model without a purchase. You can use a remote server without a purchase. I use MonkeyCode when I want that pairing in one place. Disclosure: This article was prepared as part of MonkeyCode's product outreach. I will not name models, hardware, or duration. Those details move, and the myths do not. The method still works on a laptop you already own. The free box is optional in every step below. The spec is not optional in any step. Myth 1: Free retries replace a failing test The claim It's free, so I can loop until the tree compiles. The evidence Compilation is not behavior, and it never was. A green compiler can still ship the wrong function. Retrying a prompt does not freeze an oracle for later. Did that extra retry actually get cheaper for you? The sample got cheaper, but no assertion appeared. The corrected model The failing test is the spec you keep. The agent is a patch generator you distrust. Free retries stay cheap samples, not proofs. Proposed artifact: pin the failure first Do this before you open any model tab. # test_spec.py — proposal, not a measured run def test_parse_window_rejects_empty_frame(): from parser import parse_window try: parse_window(b"") except ValueError as exc: assert "empty frame" in str(exc) return raise AssertionError("empty frame must raise ValueError") Run it and watch it fail on purpose. Then commit that failure before the agent starts. python -m pytest test_spec.py -q git add test_spec.py git commit -m "test: empty frame must raise" Did the agent finish in some chat bubble? Ask pytest instead of trusting that chat bubble. The free loop can continue all night long. The spec does not move because the loop is cheap. Myth 2: The free server's disk is the lab notebook The claim Leave the files on the box because I will remember. The evidence Free servers go away without a memorial service. Scratch disks get recycled between those quiet sessions. Your memory is not a replica of /tmp. If the only copy lives remotely, you lost the patch. You only have a rumor with a hostname. The corrected model Git remains the notebook you can actually replay. The box is a scratch filesystem you can lose. Treat every useful byte as untrusted at first. It becomes trusted on a remote you control. Proposed commands git status --short git diff --stat git rev-parse --short HEAD Copy the branch off the box before you close anything. git bundle create /tmp/work.bundle HEAD main # scp /tmp/work.bundle to a machine you control What survives a reboot of a free host? Your /tmp tree will not survive that reboot. The model's rolling context window dies too. A bundle on your laptop might still survive. Myth 3: Free boxes do not need secret hygiene The claim The box is throwaway, so a local .env is fine. The evidence Throwaway for you is still a disk for someone. Agents still read files you forgot were present. Shell logs capture export lines you pasted in a hurry. Is free really a synonym for private here? Free is not a synonym for private here. A recycled disk is not a shredder with a certificate. The corrected model The blast radius matches any other developer host. A free host is still a host with a filesystem. If the token cannot live in CI logs, it cannot live here either. Proposed guard # proposal: refuse to start if secrets are tracked if git ls-files | grep -E '(^|/)\.env$|\.pem$|id_rsa'; then echo "refusing to start agent; secret files are tracked" exit 1 fi Also scan the prompt you are about to send. Did you paste a token just this once? Then the transcript is now a secret store. Rotate that token and do not debate the transcript. The model will not unremember it for you. Myth 4: Unpinned tools are fine on a throwaway box The claim The box is disposable, so why pin Python at all? The evidence Your CI runners are not disposable in the same way. Your laptop is not disposable in that way either. An unpinned python3 on the free server is a different interpreter tomorrow morning. The agent fixed a world that will not exist at merge time. That souvenir is not a fix at merge. The corrected model Pin the world the test will actually meet. The box may be free to discard later. The language version is not a vibe you negotiate later. Proposed fingerprint Capture this every session beside the branch. Keep the fingerprint file next to that branch. #!/usr/bin/env bash # proposal: env_fingerprint.sh set -euo pipefail { printf 'utc=%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" printf 'kernel=%s\n' "$(uname -srm)" command -v python3 >/dev/null && python3 - /dev/null && printf 'go=%s\n' "$(go env GOVERSION 2>/dev/null || true)" git rev-parse HEAD >/dev/null 2>&1 && printf 'head=%s\n' "$(git rev-parse HEAD)" } | tee env.fingerprint Compare fingerprints across runs before any merge. If Python moved, the patch is a different patch. Do not merge on vibes from a dead box. Myth 5: Tomorrow's free model will replay today's patch The claim I can reconstruct this later from the saved prompt. The evidence Free model routing changes without sending you a calendar invite. Hidden system prompts change on you without warning. Your cached context is gone when the tab closes. Is a saved prompt really a build input? A prompt is a wish that has syntax. Wishes like that do not replay later. The corrected model Replay is a test plus a patch in git. It is not a prompt file in Downloads. If you cannot git checkout the result, you cannot replay the result. Proposed replay check git checkout -B replay/check python -m pytest test_spec.py -q git revert --no-edit HEAD python -m pytest test_spec.py -q # expect green, then red; that is replay Are you still tempted to archive the chat? Save it as notes inside the ticket only. Never treat it as the artifact that ships. A decision table I actually use Question If yes If no Is there a failing test first? Let the agent patch Write the test Can I copy the git bundle off-box? Use the free server Stay local Are secrets in the tree? Stop the session Continue Does env.fingerprint match CI? Merge candidate Re-pin, then re-run Can pytest replay without the model? Keep the patch Discard the session Read it top to bottom on every run. The free stack is a maybe, not a default. The table is the gate that does not care about price. A concrete debugging workflow Here is the exact loop I want used. Treat it as a proposal, not a benchmark. Write one failing test and commit it. Fingerprint the box and save env.fingerprint now. Run the secret guard and fail closed. Ask the model for a patch, not a story. Apply the patch on a named branch. Run the same test with no extra files. Bundle the branch off the free box. Replay on a machine you actually control. That is eight steps with no paid model required. That is eight steps with no paid server required. All eight still require a spec you wrote first. Where does the free stack help in practice? Steps four and five get cheaper to sample. You can throw many more patches away now. You should throw most of those patches away. Limitations This FAQ is not a performance study of vendors. I did not time models against each other. I did not rank free servers as hardware. Free access can vanish between two quiet mornings. Free servers can reset without a useful diff. Fingerprints can match while behavior still drifts under you. Tests can be wrong in a confident voice. Agents can cheat tests you wrote too narrowly. A green pytest run is still necessary here. It is not sufficient for production traffic. Do not use this approach for these cases: Workloads that carry production credentials Anything that needs a contractual uptime target Patches you cannot replay without the original chat Teams that treat git status as optional ceremony If your org forbids remote developer boxes, stay on the laptop. The five myths still apply there. Price was never the real bug. What I want you to steal Steal the order, not another vendor slogan. Keep this order: test, fingerprint, guard, patch, replay. Do not start with prompt, hope, and another free retry. Is the spec optional if the model is free? The spec was never optional for this work. The price of the model never paid for the oracle. Run the table on a free box this week. Then tell me which row failed first. I care about that failing row most. I do not care which logo sat on the box.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Programming & Dev News