Skip to content

fix: batch of 28 trivial/easy ROSETTA issues (CI, instructions, docs, rosetta-cli, MCP) - #311

Merged
isolomatov-gd merged 12 commits into
mainfrom
fix/rosetta-easy-issues-batch
Aug 19, 2026
Merged

fix: batch of 28 trivial/easy ROSETTA issues (CI, instructions, docs, rosetta-cli, MCP)#311
isolomatov-gd merged 12 commits into
mainfrom
fix/rosetta-easy-issues-batch

Conversation

@isolomatov-gd

@isolomatov-gd isolomatov-gd commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Issues closed by merging this PR

Closes #171
Closes #195
Closes #206
Closes #212
Closes #219
Closes #220
Closes #221
Closes #228
Closes #229
Closes #232
Closes #241
Closes #257
Closes #265
Closes #274
Closes #275
Closes #287
Closes #289
Closes #291
Closes #292
Closes #304

Partially advanced, left open: Refs #262, Refs #263.
Closed separately as incorrect premises, labelled invalid: #200, #226, #233, #235, #268, #290.

Changes

CI

  • timeout-minutes: e2e-testing 180, validate-test-cases 180, validate-prompts 90.
  • npm/pip caching via setup-node/setup-python on the seven ci-*.yml. requirements.txt pinned explicitly, not globbed — refsrc/ holds four more.
  • mypy gate on ci-rosetta-cli, scoped to src/rosetta-cli, via python -m mypy (not validate-types.sh, which exits 0 when it finds no runner).
  • Concurrency: ${{ github.workflow }}-${{ github.ref }} + cancel on codeql, e2e-testing, validate-prompts, validate-test-cases; static uncancellable group on rosetta-mcp-dockerhub.
  • publish-mcp-helm-chart validate cancels on pull_request only. Cancelling it on a push to main skipped publish (needs: validate) and dropped that chart version. test_publish_workflow_concurrency.py updated.
  • repo-analysis runs opus at high effort with WebSearch; its prompt gained premise-validation gates.

Instructions (r3)

  • Removed model:, context:, agent:, metadata: from skill frontmatter. All four exist only for the fork scenario, which Rosetta does not use; docs/schemas/skill.md documents context: "fork" alone, and agent only as its target.
  • Fixed a <prerequisites> block with two opening tags and no close, a subagent="HITL" misuse, a gap log pointing at the wrong phase, and a source-code-specs reference to files no phase creates.
  • requirements-authoring acceptance criteria consistently EARS; one checklist line still said Given/When/Then.
  • bootstrap-alwayson requires ASD-STE100.
  • READMEs record why /goal, /advisor and graphify are absent from this repo by design, so they are not "cleaned up" again.

Docs

  • DEPENDENCIES.md / TECHSTACK.md: pins synced to the real pyprojects; own-version claims replaced with (in repo) markers; plugin table now lists all 7 targets and the light variants instead of 3.
  • definitions/skills.md: discovery and design no longer marked (not yet) — both ship in every plugin. definitions/agents.md: analystrequirements-engineer. ARCHITECTURE.md: 40 skills, not 38.
  • Stale OAuth TODO removed (all three call sites pass True). Hooks manual-test doc corrected against executed bundle output.

rosetta-cli

  • --parse-timeout reaches both wait_for_parsing call sites; the single-file path passed none and the folder-batch path defaulted to a hardcoded 300. Precedence is flag > env > default, and an unset flag no longer clobbers RAGFLOW_PARSE_TIMEOUT.
  • Behaviour change: default parse timeout is 1200, not 300. from_env_vars already used 1200, so the dataclass's 300 was dead in that path.
  • RAGFLOW_TIMEOUT configurable, default unchanged at 30.
  • Stopped logging api_key[:10] — the ragflow- prefix is 8 chars, so it exposed secret material. __str__ narrowed to [:8]. Closes a CodeQL py/clear-text-logging-sensitive-data alert.
  • Tag-in-Title docs corrected against DocumentData.from_file.

rosetta-mcp-server

  • Download fallback (30s) and legacy bootstrap request (60s) honour ROSETTA_RAGFLOW_HTTP_TIMEOUT. No new config field; behaviour is byte-identical when unset.
  • list_instructions parameter documented as full_path_from_root.

Dependabot — 15 alerts, via overrides in five package.json plus lock regeneration: postcss 8.5.23 (all five), hono 4.12.34 / ip-address 10.3.1 / fast-uri 3.1.5 (rosettify), js-yaml 3.15.1 (rosettify-plugins), json 2.21.2 (docs/web/Gemfile.lock). npm audit --omit=dev reports 0 for four; curiocity reports 1, the unpatched extract-zip noted below.

Versions — curiocity 0.2.6, rosettify 3.2.3, rosettify-plugins 3.3.2, rosettify-prompts 0.1.12, rosetta-cli / rosetta-mcp / ims-mcp 3.0.4 (ims-mcp pins rosetta-mcp==3.0.4), plugin + marketplace 3.1.10. Each is unpublished on npm/PyPI. src/hooks is private and versionless; it gets the override only.

Deliberately not changed

  • extract-zip CVE-2026-56876 (high, symlink traversal) in curiocity. No patched release exists upstream; 2.0.1 is both latest and vulnerable. Exposure is src.zip eval fixtures, repo-local.
  • /goal, /advisor, graphify — real user-enabled features, absent from this repo by design.
  • repo-*.yml concurrency — none, per docs/AUTOMATION-ARCHITECTURE.md:176-180.

Validation

scripts/pre_commit.py green (3598 tests), plus 419 Python, 432 curiocity, mypy clean. plugins/ is byte-identical to a fresh two-pass regeneration (standard + --profile lightweight).

… docs, CLI, MCP

Six parallel groups, disjoint filesets, each issue reproduced before being
fixed and validated by execution.

CI workflows (.github/workflows, publish-*.yml deliberately untouched):
- timeout-minutes for e2e-testing, validate-prompts, validate-test-cases
- npm/pip dependency caching via built-in setup-node/setup-python caching
- mypy strict gate wired into ci-rosetta-cli (verified clean, 22 files)

r3 instructions (plugins/** regenerated via scripts/pre_commit.py):
- removed dangling 'advisor' role and undefined /goal directive references
- fixed broken <prerequisites> tag, subagent="HITL" misuse, self-referencing
  gap target, and a reference to source-code-specs files that never existed
- codemap no longer routes to a non-existent 'graphify' skill; graphify is an
  external CLI backend, not a Rosetta skill
- subagent definitions now declare the real bootstrap chain
  (bootstrap-alwayson + subagent-directives), not the orchestrator-only one
- requirements-authoring acceptance criteria consistently EARS, not GWT

docs: schema context: default documented, ragflow-sdk/cachetools pins synced,
stale OAuth TODO removed, hooks manual-test doc references made resolvable

rosetta-cli: --parse-timeout now actually reaches both wait_for_parsing call
sites and no longer clobbers RAGFLOW_PARSE_TIMEOUT when unset; parse timeout
default settled on 1200 (was inconsistent 300/1200); RAGFLOW_TIMEOUT made
configurable; get_dataset no longer hardcodes page_size=10; Tag-in-Title docs
corrected against actual behavior

rosetta-mcp-server: document-download fallback and legacy bootstrap request
now honor ROSETTA_RAGFLOW_HTTP_TIMEOUT instead of hardcoded 30s/60s;
list_instructions parameter documented as full_path_from_root

Validation: 1179 hooks + 1566 rosettify + 572 rosettify-plugins + 96
rosettify-prompts + 392 python tests pass; mypy strict clean; actionlint
reports zero new findings; scripts/pre_commit.py passes.

Closes #171
Closes #195
Closes #200
Closes #206
Closes #212
Closes #219
Closes #220
Closes #221
Closes #226
Closes #228
Closes #229
Closes #232
Closes #233
Closes #235
Closes #241
Closes #257
Closes #265
Closes #268
Closes #274
Closes #275
Closes #287
Closes #289
Closes #290
Closes #291
Closes #292
Closes #304

Refs #262
Refs #263

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added bug Something isn't working instructions skills, subagents, rules, workflows, commands for AI agents labels Aug 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Rosetta Triage Review

Summary: Batch fix closing 26 issues (partially advancing 2 more) across CI workflows, r3 instructions/generated plugins, rosetta-cli, and rosetta-mcp-server. Each fix claims a reproduce-before-fix + execution-validated workflow; 850/-353 lines across ~200 files (most are 1:1 generated plugin mirrors).

Findings:

  • Instruction-quality review (mandatory for instructions/r3/** changes): all edits verified against Rosetta's own conventions — subagent prep-chain fix is consistent across all 7 agent files, USE SKILL graphify//goal removals are genuinely dead references, <prerequisites> tag and subagent="HITL"type="HITL" fixes are correct, EARS-consistency fix closes the last Given/When/Then holdout. Verdict: clean.
  • rosetta-cli timeout-precedence rework (parse_command.py, publish_command.py, rosetta_config.py) correctly uses a None-sentinel to distinguish "flag not passed" from an explicit 0, avoiding a falsy-check bug; the 300→1200 default change is threaded through a single DEFAULT_PARSE_TIMEOUT constant and guarded by a test asserting dataclass/env/template all agree. get_dataset page_size fix has a genuinely meaningful regression test (13-dataset substring-collision case).
  • rosetta-mcp-server: legacy bootstrap timeout is byte-identical when ROSETTA_RAGFLOW_HTTP_TIMEOUT is unset as claimed; the download-fallback path's default silently doubles from 30s to 60s (a real behavior change beyond what the PR description implies as "byte-identical") — covered by an explicit test, but worth flagging since the PR body only calls out the legacy path as unchanged.
  • CI workflow changes (timeout-minutes, npm/pip caching, mypy gate) all verified against the actual diff: cache-dependency-path targets are git-tracked, the mypy gate correctly bypasses validate-types.sh's silent warn-and-pass fallback, and the three timeout-minutes values each have distinct, sound justifications (not copy-pasted).

Caveats:

  • Large single PR spanning 4 unrelated areas (CI, instructions, rosetta-cli, mcp-server) — mixes concerns per the repo's own SRP guidance, though the description explains it as 6 disjoint-fileset parallel workstreams merged together.
  • Download-fallback timeout default change (30s→60s) in rosetta-mcp-server reads as a bigger behavior change than the PR description's "byte-identical" framing suggests for that specific call site — worth a release-note mention alongside the already-flagged parse-timeout default change.
  • Author's own "Not closed, and why" and "Follow-ups found, not fixed" sections are thorough and self-critical (a cleanup-dataset deletion-scope risk, docs still seeding the old orchestrator-only prep chain in templates, stale pins, a stale manual-test doc) — worth turning into tracked issues rather than losing them in the PR body.

Suggestions:

  • Split future batches of this size by area (CI / instructions / cli / mcp) for easier review and safer partial revert, even when the underlying issues are unrelated.
  • File the four "Follow-ups found, not fixed" items as separate issues so they don't get lost once this PR merges.

Questions:

  • Confirm the plugin version bump (scripts/bump_versions.sh) will happen before/at merge as noted in the PR's "Before merging" section — is that step planned as part of this PR or a follow-up commit?

Automated triage by Rosetta agent

…h versions

The repo already pins vulnerable transitive deps through `overrides`; those
pins had gone stale. Refreshed them to the first patched release and
regenerated every lock file with `npm install`.

- postcss 8.5.23 (CVE-2026-69153) — new override in all 5 npm packages
- hono 4.12.34 (CVE-2026-69207, -71848, -71849, -71850) — rosettify
- ip-address 10.3.1 (CVE-2026-69192, -69198, -54272) — rosettify
- fast-uri 3.1.5 (CVE-2026-18446) — rosettify
- js-yaml 3.15.1 (GHSA-5p4m-2wfm-xmqj) — rosettify-plugins
- json 2.21.2 (CVE-2026-71847) — docs/web/Gemfile.lock, via bundle lock

Patch versions bumped so each package can publish:
curiocity 0.2.4 -> 0.2.5, rosettify 3.2.1 -> 3.2.2,
rosettify-plugins 3.2.1 -> 3.2.2, rosettify-prompts 0.1.10 -> 0.1.11.
src/hooks is private with no version field, so it gets the override only.

Not fixed: extract-zip (CVE-2026-56876, symlink path traversal, high) in
src/curiocity. Upstream has no patched release — latest published version
IS 2.0.1, the vulnerable one. Left as-is per maintainer decision.

Validation: npm audit --omit=dev reports 0 vulnerabilities in all five
packages; every flagged package resolves to its patched version in the
regenerated trees. Tests: hooks 1179, rosettify 1566, rosettify-plugins 572,
rosettify-prompts 96, curiocity 429 — all pass. pre_commit.py passes.
venv unaffected: no Python advisories, `pip check` clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@isolomatov-gd
isolomatov-gd marked this pull request as draft August 19, 2026 12:21
isolomatov-gd and others added 8 commits August 19, 2026 09:42
…ysis prompt

Audited every issue in this batch against a governing authority instead of
trusting the triage text. Six premises were wrong and are reverted.

Reverted — the referenced thing is a real external feature, absent from this
repo by design:
- #200, #226: `advisor` is a Claude Code feature (`/advisor <model>`)
- #235: `/goal` is a Claude Code feature, set externally by the user
- #233: `graphify` is a user-installed skill (`graphify install` registers
  `/graphify query|path|explain`) — https://github.com/safishamsi/graphify

Reverted — prescribed convention, not a defect:
- #290: the prep-steps line is canonical in all three docs/schemas/*.md and in
  the shell templates; coding/README.md:37 forbids rewording it locally

Reverted — premise factually false:
- #268: dataset names are unique, so `list_datasets(name=...)` returns at most
  one match and `page_size=10` cannot truncate it; comment added at the call
  site so it is not re-filed

#241 fixed in the opposite direction to the issue: `context:` exists only to
fork a skill into a subagent, so `context: default` is a no-op and the schema
was right to document only `fork`. Removed the dead keys from 7 skills instead
— `context:` (7), `agent:` (6), `model:` (4), and the `metadata:` version/
category block (5) — plus the README lines pinning them as invariants. Also
fixed a pre-existing instance of the same class in tech-specs/README.md.

#228 settled on 1200 and wired the fourth location
(`document_service.wait_for_parsing`) to `DEFAULT_PARSE_TIMEOUT`, making the
"single source of truth" comment true.

#229 finished properly: dropped the "known stale" blockquote and corrected the
sections it named, against output captured by running the built bundles.

Guardrails so this class of error is not repeated:
- `docs/definitions/workflows.md` documents `/goal`, `/advisor`, and graphify
  as user-enabled features that must not be "cleaned up"
- `codemap/README.md` and `orchestration/README.md` invariants say the same
- `.github/prompts/repo-analysis.md`: two new validation-gate checks
  (external-not-undefined, problem-real-but-fix-inverted) and a ban on
  mechanical work
- `.github/workflows/repo-analysis.yml`: opus + high effort, WebSearch allowed

Also fixed duplicate list numbering in adhoc-flow.md and
requirements-authoring-flow.md.

Validation: 1179 hooks + 1566 rosettify + 572 rosettify-plugins + 96
rosettify-prompts + 429 curiocity + 391 python tests pass; mypy strict clean;
actionlint clean; pre_commit.py passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Versions — this PR changes rosetta-cli and rosetta-mcp code, but both were at
3.0.2, already on PyPI, so merging would hard-fail both publish workflows:
- src/rosetta-cli 3.0.2 -> 3.0.3
- src/rosetta-mcp-server 3.0.2 -> 3.0.3
- src/ims-mcp-server 3.0.1 -> 3.0.3 and its pin rosetta-mcp==3.0.1 -> ==3.0.3;
  it is a thin alias that must track rosetta-mcp exactly, and it had been left
  behind at 3.0.1

Concurrency — filled the remaining gaps, matching each workflow's actual risk:
- codeql, validate-prompts, validate-test-cases: ${{ github.workflow }}-${{ github.ref }},
  cancel-in-progress true; disposable runs, a superseded commit should not keep billing
- e2e-testing: same group, cancel-in-progress false; each run is a deliberate
  dispatch up to 180 min of real agent cost and must not be killed
- rosetta-mcp-dockerhub: static group, cancel-in-progress false; it publishes to a
  shared image repo and moves the mutable `latest` tag, so ref-scoping would let a
  workflow_dispatch from a branch race the main push, and cancelling would abort a
  layer upload mid-flight

Docs — our own package versions were embedded in docs/DEPENDENCIES.md and
docs/TECHSTACK.md, which is a second source of truth that had already drifted to
R2-era numbers. Replaced with an "(in repo)" marker instead of chasing the number,
and fixed the factual errors found alongside:
- the section labelled `rosetta-mcp-server` actually describes src/ims-mcp-server
- its entry point is `ims-mcp`, not `rosetta-mcp`
- fastmcp >=3.1.0 -> >=3.4.0, mypy >=1.10.0 -> >=2.1.0,<2.2, pybars3 row added
- refsrc/fastmcp-3.1.1 -> 3.3.1 and refsrc/ragflow-0.24.0 -> 0.25.1, the dirs that
  actually exist

Also: corrected a false claim in ci-rosetta-cli.yml — validate-types.sh would gate
the Python check, not warn-and-pass; the real reason to call mypy directly is scope.
And recorded why publish-ims-mcp.yml / publish-instructions.yml carry no pip cache
(no lockfile to key on) so it is not re-filed as a defect.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rap line

agents/MEMORY.md — two preventive rules from this batch's root causes:
- absence from this repo is not proof a referenced thing does not exist
  (`/goal` and `/advisor` are Claude Code features, `graphify` is a
  user-installed skill; six issues were filed on this error and acting on
  them deleted working features)
- prescriptive schemas outrank observed patterns (a line repeated verbatim
  across many files is a convention, not a defect)

agents/IMPLEMENTATION.md — current-state entries, not a change log:
parse-timeout precedence and RAGFLOW_TIMEOUT under CLI; RAGFlow HTTP timeout
coverage under MCP Server; CI timeouts, caching, mypy gate and the concurrency
posture under Workflows; skill frontmatter key policy under Instructions.

instructions/r3/core/rules/bootstrap-alwayson.md — adds
"MUST follow ASD-STE100 Simplified Technical English", with the generated
plugin copies and hooks.json payloads regenerated to match.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Conflicts: 36 total, 5 real (31 were generated plugins/** shadows).

Resolutions:
- 4 skills' frontmatter (coding-agents-farm, coding-agents-prompt-authoring,
  reasoning, research): keep this branch's removal of `model:`/`context:`/
  `agent:`/`metadata:`. All four are fork-scenario keys and Rosetta does not
  use fork; `docs/schemas/skill.md` documents only `context: "fork"` and
  `agent` as its target. Main had refreshed the values; the keys go instead.
- reasoning/README.md: drop the bullets asserting those keys are intended.
- src/rosettify-plugins 3.2.2 vs 3.3.0 -> 3.3.1. Main's 3.3.0 is already
  published on npm, so the dependabot override fix needs a new patch on top.
  Branch's `overrides` (js-yaml 3.15.1, postcss 8.5.23) kept.

Follow-on fixes found while auditing the merged tree:
- docs/definitions/skills.md: `discovery` and `design` were marked
  `(not yet)` but both exist and ship in every plugin.
- docs/definitions/agents.md: `analyst` -> `requirements-engineer`.
- docs/ARCHITECTURE.md: 38 -> 40 skills.
- reasoning/README.md, research/README.md: removed descriptions of the
  frontmatter keys this branch deleted. research/README.md had instructed
  future editors to preserve them.

Regenerated plugins/ with both passes (standard + --profile lightweight).
Tests: 3598 pre-commit gate, 419 python, 432 curiocity. All green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The validate job shares a ref-scoped group with cancel-in-progress: true, and
the workflow triggers on push to main. Two chart pushes inside the validate
window make the second cancel the first, and publish (needs: validate) is then
skipped. helm push reads the version from Chart.yaml at checkout, so if both
pushes bumped `version:` the first one never reaches the registry — a silent
gap in the chart version series, with no error and no overwrite.

Cancellation now applies to pull_request events only, which is where it is
actually wanted (superseded PR validations). Updated the #300 regression test,
which asserted the unconditional `true`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ants

The plugin table named 3 rows for what is now 14 trees: core-copilot,
core-codex, core-antigravity, both standalones and all 7 `-light` variants
were absent. The `rosetta` row named no tree at all — `rosetta` is the
marketplace name of core-claude, not a plugin folder.

Each row now carries the target's manifest path and output shape, plus rows
for the lightweight profile variants and the two generator passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`validate()` logged `api_key[:10]` when the key lacked the `ragflow-` prefix.
That prefix is 8 characters, so the excerpt exposed two characters of the
secret itself — and it only fired when the value was not a RAGFlow key at all,
so the excerpt carried no diagnostic value either. Dropped it entirely.

`__str__` had the same off-by-two: its "masks API key" contract is satisfied by
showing the 8-char prefix, not 10 characters. Narrowed to `[:8]`.

Closes CodeQL alert py/clear-text-logging-sensitive-data. Both statements were
pre-existing on main; the merge's diff size pulled the first into this PR's
alert gate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: isolomatov-gd <isolomatov@griddynamics.com>
@isolomatov-gd
isolomatov-gd marked this pull request as ready for review August 19, 2026 21:36
isolomatov-gd and others added 2 commits August 19, 2026 17:48
The OS block covered .DS_Store, .AppleDouble and .LSOverride. Added the
remaining fixed names macOS writes: .Spotlight-V100, .Trashes, .fseventsd,
.TemporaryItems, .VolumeIcon.icns, .apdisk and
.com.apple.timemachine.donotpresent.

Named entries only, no wildcards. AppleDouble sidecars (`._` + the real
filename) are deliberately not covered, since they cannot be listed without a
glob. Also skipped classic-Mac `Icon\r`, which needs a literal carriage return
in the file.

Nothing macOS-generated was ever tracked, so nothing had to be removed from
the index. Verified: all ten patterns match, all 21 on-disk .DS_Store files
resolve as ignored, and no tracked path is shadowed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The four lock files still carried the pre-bump version in both `version` and
`packages[""].version`. Regenerated with --package-lock-only; the diff is
those two fields per file and no dependency changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@isolomatov-gd
isolomatov-gd merged commit 869d727 into main Aug 19, 2026
13 of 14 checks passed
@isolomatov-gd
isolomatov-gd deleted the fix/rosetta-easy-issues-batch branch August 19, 2026 22:06
isolomatov-gd added a commit to fauad123/rosetta that referenced this pull request Aug 19, 2026
Conflict was a one-line kwarg collision in the RAGFlowClient(...) call in
cli.py: main added timeout=config.timeout (griddynamics#311), this branch adds
dataset_default=config.dataset_default. Both kept.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment