Skip to content

Untrack internal topology, add the Redmine time-tracking playbook - #1

Open
siva01c wants to merge 3 commits into
mainfrom
security/untrack-internal-topology
Open

siva01c wants to merge 3 commits into
mainfrom
security/untrack-internal-topology

Conversation

@siva01c

@siva01c siva01c commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Two commits that both answer the same question: what a public agent repository should and shouldn't carry.

f8ff9a5 — untrack internal topology (committed earlier, unpushed until now). TOOLS.md was a full map of six containers, their ports and the shared bridge network; todo.md carried absolute local paths into every private repo, internal auth routes, .local hostnames and MCP token variable names. Neither is a credential — .mcp.json uses ${MCP_GATEWAY_TOKEN} substitution — but together they hand over the internal layout for free. Both are gitignored rather than deleted: workspace/ is bind-mounted, so the agent keeps reading its local copies and only the tracking changes. TOOLS.md.example ships the same structure with placeholder names.

a75f2b7 — add the Redmine time-tracking playbook. SOUL.md and USER.md already tell ClawBot to log its hours to skills/redmine-time-tracking/SKILL.md, but that file was never tracked here — the container read it from the bind mount while the repository had no copy at all.

This copy is deliberately narrower than the canonical one in the monorepo, following the same rule as f8ff9a5: no stack endpoints or ports, no compose service names, no admin Rails-runner procedure. ClawBot loses nothing by that — it reaches Redmine through the gateway's redmine__* tools, and anything the Redmine Agent role can't do needs host access the container doesn't have.

What the playbook does document, found while using it: the Agent role's writes to status_id and parent_issue_id are dropped silently — the API still answers 204 — so the procedure requires reading the issue back rather than trusting the response.

Review notes

  • The playbook is a mirror; the canonical copy lives in the monorepo at ai/skills/redmine-time-tracking/SKILL.md and the two need to stay in sync when the procedure changes.
  • Local edits to AGENTS.md, SOUL.md, USER.md, HEARTBEAT.md and TOOLS.md.example are not in this PR — they are uncommitted work from another session and were left untouched.

🤖 Generated with Claude Code

siva01c and others added 2 commits August 17, 2026 16:16
clawbot is a public repository, but two workspace files published the
private ecosystem's internal layout.

TOOLS.md was a complete map of six containers, their ports and the shared
bridge network they sit on. todo.md is an internal build roadmap carrying
absolute local filesystem paths into every private repo, internal auth
routes, .local hostnames and MCP token variable names.

Neither is a credential — .mcp.json correctly uses ${MCP_GATEWAY_TOKEN}
substitution and no secret was ever committed — but together they hand an
attacker the internal topology for free.

Both are gitignored rather than deleted: workspace/ is bind-mounted (see
docker-compose.yml), not baked into the image, so the agent keeps reading
its local copies and only the tracking changes. TOOLS.md.example ships the
same structure with placeholder container names.

Skill docs are left alone. They name sibling projects, but the names alone
expose no topology and are already public via README — stripping them would
gut the agent's functional documentation for no security gain.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ClawBot is told to log its hours in SOUL.md and USER.md, but the playbook they
point at was never tracked here — the container read it from the bind mount
while the repository had no copy of it at all.

This copy is deliberately narrower than the canonical one in Luděk's monorepo:
this repository is public, so the stack's endpoints and ports, the compose
service names and the admin Rails-runner procedure stay out of it, the same way
f8ff9a5 untracked TOOLS.md and todo.md. ClawBot loses nothing — it reaches
Redmine through the gateway's redmine__* tools, and anything the Agent role
can't do needs host access it doesn't have anyway.

What it does document, found while using it: the Agent role's writes to
status_id and parent_issue_id are dropped silently (Redmine still answers 204),
so the playbook requires reading the issue back instead of trusting the
response.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Plymovent moved to lkv/customers/plymovent (Redmine LKV #13), so the
directory column has to name the new path or the container resolves nothing
and falls through to lkv.

Also carries the pending sync of the clawbot and drupal-cz rows, which the
canonical copy at ai/skills/redmine-time-tracking/SKILL.md already had. The
two copies are required to agree.

Refs LKV #13

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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