fix: batch of 28 trivial/easy ROSETTA issues (CI, instructions, docs, rosetta-cli, MCP) - #311
Merged
Merged
Conversation
… 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>
isolomatov-gd
requested review from
YevheniiaLementova and
omaiesh
as code owners
August 19, 2026 11:24
Contributor
Rosetta Triage ReviewSummary: Batch fix closing 26 issues (partially advancing 2 more) across CI workflows, r3 instructions/generated plugins, Findings:
Caveats:
Suggestions:
Questions:
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
marked this pull request as draft
August 19, 2026 12:21
…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
marked this pull request as ready for review
August 19, 2026 21:36
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
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.
This was referenced Aug 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-testing180,validate-test-cases180,validate-prompts90.setup-node/setup-pythonon the sevenci-*.yml.requirements.txtpinned explicitly, not globbed —refsrc/holds four more.ci-rosetta-cli, scoped tosrc/rosetta-cli, viapython -m mypy(notvalidate-types.sh, which exits 0 when it finds no runner).${{ github.workflow }}-${{ github.ref }}+ cancel oncodeql,e2e-testing,validate-prompts,validate-test-cases; static uncancellable group onrosetta-mcp-dockerhub.publish-mcp-helm-chartvalidatecancels onpull_requestonly. Cancelling it on a push to main skippedpublish(needs: validate) and dropped that chart version.test_publish_workflow_concurrency.pyupdated.repo-analysisruns opus at high effort with WebSearch; its prompt gained premise-validation gates.Instructions (r3)
model:,context:,agent:,metadata:from skill frontmatter. All four exist only for the fork scenario, which Rosetta does not use;docs/schemas/skill.mddocumentscontext: "fork"alone, andagentonly as its target.<prerequisites>block with two opening tags and no close, asubagent="HITL"misuse, a gap log pointing at the wrong phase, and asource-code-specsreference to files no phase creates.requirements-authoringacceptance criteria consistently EARS; one checklist line still said Given/When/Then.bootstrap-alwaysonrequires ASD-STE100./goal,/advisorandgraphifyare 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:discoveryanddesignno longer marked(not yet)— both ship in every plugin.definitions/agents.md:analyst→requirements-engineer.ARCHITECTURE.md: 40 skills, not 38.True). Hooks manual-test doc corrected against executed bundle output.rosetta-cli
--parse-timeoutreaches bothwait_for_parsingcall 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 clobbersRAGFLOW_PARSE_TIMEOUT.from_env_varsalready used1200, so the dataclass's 300 was dead in that path.RAGFLOW_TIMEOUTconfigurable, default unchanged at 30.api_key[:10]— theragflow-prefix is 8 chars, so it exposed secret material.__str__narrowed to[:8]. Closes a CodeQLpy/clear-text-logging-sensitive-dataalert.DocumentData.from_file.rosetta-mcp-server
ROSETTA_RAGFLOW_HTTP_TIMEOUT. No new config field; behaviour is byte-identical when unset.list_instructionsparameter documented asfull_path_from_root.Dependabot — 15 alerts, via
overridesin fivepackage.jsonplus lock regeneration:postcss8.5.23 (all five),hono4.12.34 /ip-address10.3.1 /fast-uri3.1.5 (rosettify),js-yaml3.15.1 (rosettify-plugins),json2.21.2 (docs/web/Gemfile.lock).npm audit --omit=devreports 0 for four; curiocity reports 1, the unpatchedextract-zipnoted 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-mcppinsrosetta-mcp==3.0.4), plugin + marketplace 3.1.10. Each is unpublished on npm/PyPI.src/hooksis private and versionless; it gets the override only.Deliberately not changed
extract-zipCVE-2026-56876 (high, symlink traversal) in curiocity. No patched release exists upstream; 2.0.1 is both latest and vulnerable. Exposure issrc.zipeval fixtures, repo-local./goal,/advisor,graphify— real user-enabled features, absent from this repo by design.repo-*.ymlconcurrency — none, perdocs/AUTOMATION-ARCHITECTURE.md:176-180.Validation
scripts/pre_commit.pygreen (3598 tests), plus 419 Python, 432 curiocity, mypy clean.plugins/is byte-identical to a fresh two-pass regeneration (standard +--profile lightweight).