<feed xmlns='http://www.w3.org/2005/Atom'>
<title>claudomator.git/internal/executor, branch main</title>
<subtitle>claudomator — task automation server
</subtitle>
<id>https://git.terst.org/claudomator.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/claudomator.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/'/>
<updated>2026-07-11T09:37:31+00:00</updated>
<entry>
<title>fix(executor): validate the model classifier's output against a known model list</title>
<updated>2026-07-11T09:37:31+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-11T09:37:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=027536520409757ba38cd4c78e07b2ca0797a2d7'/>
<id>urn:sha1:027536520409757ba38cd4c78e07b2ca0797a2d7</id>
<content type='text'>
The Gemini-based Classifier trusted its LLM output verbatim. Twice in
production it echoed part of its own prompt's JSON schema literally --
'model-name' (the prompt's own placeholder, also fixed here to be less
echo-prone) and separately 'choose-the-best-model' -- instead of
substituting a real model identifier. Both were syntactically valid JSON
strings that passed straight through to the claude CLI's --model flag,
which rejected them and failed the task outright. validateClassification
now rejects anything outside the known model list, which Classify's
existing error handling already treats as 'classification failed' and
falls back to no explicit model override -- the same documented fallback
path, now also covering 'succeeded but returned garbage.'
</content>
</entry>
<entry>
<title>fix(executor): periodically sweep stale dispatch workspace directories</title>
<updated>2026-07-10T22:13:49+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-10T22:13:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=06c9730441593c191f968f8041a0e76f56368a39'/>
<id>urn:sha1:06c9730441593c191f968f8041a0e76f56368a39</id>
<content type='text'>
ContainerRunner preserves a failed execution's workspace indefinitely for
debugging, with no expiry -- this accumulated 161 stale directories
(~17.6GB) and took the host to 100% disk full on 2026-07-10. Pool.RunWorkspaceCleanup
sweeps claudomator-workspace-* dirs older than 24h every hour, started from
serve.go, mirroring StoryOrchestrator.Run's ticker shape. Never removes a
directory still referenced as a currently-BLOCKED task's sandbox_dir,
regardless of age.
</content>
</entry>
<entry>
<title>refactor(executor): nested builder-role tasks go READY not COMPLETED, requiring external arbitrated review</title>
<updated>2026-07-10T03:03:50+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator.local</email>
</author>
<published>2026-07-10T03:03:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=2c8a5c17dd43bee329f62a9c662d04571b9cd2d7'/>
<id>urn:sha1:2c8a5c17dd43bee329f62a9c662d04571b9cd2d7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(task,executor): add CurrentAttempt resolution, wire maybeUnblockParent to resolve through it</title>
<updated>2026-07-09T04:39:05+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator.local</email>
</author>
<published>2026-07-09T04:39:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=4ba335c8eacb3f9e20bccce1643b2e5320d5239d'/>
<id>urn:sha1:4ba335c8eacb3f9e20bccce1643b2e5320d5239d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>style: gofmt executor.go, executor_test.go, task.go</title>
<updated>2026-07-09T03:59:51+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-09T03:59:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=0fc0c1e6ee0f106da7b91da7847c163936128051'/>
<id>urn:sha1:0fc0c1e6ee0f106da7b91da7847c163936128051</id>
<content type='text'>
Pre-existing gofmt debt on all three files (confirmed dirty before
this session's nested-subtask-completion commit too, not a
regression) -- cleaned up while already touching these files.
</content>
</entry>
<entry>
<title>fix(executor): support nested subtask decomposition (subtask-with-own-subtasks correctly blocks, cascades, and recovers)</title>
<updated>2026-07-09T03:53:51+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-07-09T03:53:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=ad00e1865c19afd40c8d159dbb55668ed6b51b12'/>
<id>urn:sha1:ad00e1865c19afd40c8d159dbb55668ed6b51b12</id>
<content type='text'>
</content>
</entry>
<entry>
<title>style: gofmt internal/executor and internal/agentloop</title>
<updated>2026-07-09T03:26:52+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-09T03:26:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=4ac7894cd621300f8663022aff764e48c8b71d3e'/>
<id>urn:sha1:4ac7894cd621300f8663022aff764e48c8b71d3e</id>
<content type='text'>
Task 2 of the task-acceptance-criteria plan copied the plan
document's own misaligned struct-literal text verbatim without
running gofmt afterward, newly breaking gofmt compliance on
tools.go/agentmcp.go; also fixes pre-existing unrelated misalignment
in channel.go/channel_test.go while touching the same files.
</content>
</entry>
<entry>
<title>feat(agentchannel,executor,agentloop): expose acceptance_criteria on spawn_subtask</title>
<updated>2026-07-09T03:16:37+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-07-09T03:16:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=8068dca4641393c03aec12253e7c1195943727f1'/>
<id>urn:sha1:8068dca4641393c03aec12253e7c1195943727f1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(agentloop,executor): expose report_verdict as a tool on both transports</title>
<updated>2026-07-08T09:31:15+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-07-08T09:31:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=9aee6e769a19fcf21493f9f76c967bc3ff5557de'/>
<id>urn:sha1:9aee6e769a19fcf21493f9f76c967bc3ff5557de</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(agentchannel,executor): add ReportVerdict for structured approve/reject signals</title>
<updated>2026-07-08T09:11:14+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-07-08T09:11:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=09066e1e4e928487bea0658492fd8573607c77c3'/>
<id>urn:sha1:09066e1e4e928487bea0658492fd8573607c77c3</id>
<content type='text'>
</content>
</entry>
</feed>
