{"id":47611791,"url":"https://github.com/ywatanabe1989/scitex-dev","last_synced_at":"2026-05-24T10:04:28.020Z","repository":{"id":344019901,"uuid":"1180119453","full_name":"ywatanabe1989/scitex-dev","owner":"ywatanabe1989","description":"Shared developer utilities for the SciTeX ecosystem","archived":false,"fork":false,"pushed_at":"2026-05-08T02:16:47.000Z","size":20758,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-08T02:22:54.093Z","etag":null,"topics":["bulk-rename","developer-tools","documentation","llm-friendly","mcp","python","scitex"],"latest_commit_sha":null,"homepage":"https://scitex-dev.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ywatanabe1989.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":"CLA.md"}},"created_at":"2026-03-12T18:08:55.000Z","updated_at":"2026-05-01T10:53:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ywatanabe1989/scitex-dev","commit_stats":null,"previous_names":["ywatanabe1989/scitex-dev"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/ywatanabe1989/scitex-dev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ywatanabe1989%2Fscitex-dev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ywatanabe1989%2Fscitex-dev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ywatanabe1989%2Fscitex-dev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ywatanabe1989%2Fscitex-dev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ywatanabe1989","download_url":"https://codeload.github.com/ywatanabe1989/scitex-dev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ywatanabe1989%2Fscitex-dev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32789370,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bulk-rename","developer-tools","documentation","llm-friendly","mcp","python","scitex"],"created_at":"2026-04-01T20:30:42.740Z","updated_at":"2026-05-24T10:04:28.011Z","avatar_url":"https://github.com/ywatanabe1989.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SciTeX Dev (`scitex-dev`)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://scitex.ai\"\u003e\n    \u003cimg src=\"docs/scitex-logo-blue-cropped.png\" alt=\"SciTeX\" width=\"400\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003eShared developer utilities for the SciTeX ecosystem\u003c/b\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://scitex-dev.readthedocs.io/\"\u003eFull Documentation\u003c/a\u003e · \u003ccode\u003euv pip install scitex-dev[all]\u003c/code\u003e\n\u003c/p\u003e\n\n\u003c!-- scitex-badges:start --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/scitex-dev/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/scitex-dev?label=PyPI\" alt=\"PyPI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/scitex-dev/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/scitex-dev?label=Python\" alt=\"Python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ywatanabe1989/scitex-dev/actions/workflows/rtd-sphinx-build-on-ubuntu-latest.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ywatanabe1989/scitex-dev/rtd-sphinx-build-on-ubuntu-latest.yml?branch=develop\u0026label=RTD\" alt=\"RTD\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.gnu.org/licenses/agpl-3.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-AGPL--3.0-blue.svg?label=License\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ywatanabe1989/scitex-dev/actions/workflows/pytest-matrix-on-ubuntu-py3-11-3-12-3-13.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ywatanabe1989/scitex-dev/pytest-matrix-on-ubuntu-py3-11-3-12-3-13.yml?branch=develop\u0026label=Tests\" alt=\"Tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ywatanabe1989/scitex-dev/actions/workflows/import-smoke-on-ubuntu-py3-12.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ywatanabe1989/scitex-dev/import-smoke-on-ubuntu-py3-12.yml?branch=develop\u0026label=Install-Check\" alt=\"Install-Check\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ywatanabe1989/scitex-dev/actions/workflows/scitex-dev-quality-audit-on-ubuntu-latest.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ywatanabe1989/scitex-dev/scitex-dev-quality-audit-on-ubuntu-latest.yml?branch=develop\u0026label=Quality\" alt=\"Quality\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/ywatanabe1989/scitex-dev\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/ywatanabe1989/scitex-dev/develop?label=CodeCov\" alt=\"CodeCov\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003c!-- scitex-badges:end --\u003e\n\n---\n\n## Problem and Solution\n\n| # | Problem | Solution |\n|---|---------|----------|\n| 1 | **~70 ecosystem packages drift apart** -- versions, READMEs, sphinx setups, CLI conventions diverge faster than humans can audit | **`scitex-dev ecosystem audit-*`** -- `audit-project`, `audit-cli`, `audit-mcp-tools`, `audit-python-apis`, `audit-skills`, `audit-summary` enforce ~130 numbered rules across the whole ecosystem |\n| 2 | **Skills scattered across ~70 source repos** -- AI agents can't discover them; humans can't review them | **`scitex-dev skills list / get / export`** -- aggregate every package's `_skills/` and symlink them into `~/.claude/skills/scitex/` for live-edit dev loops |\n| 3 | **Coordinated releases need ten manual steps** -- bump version, push tag, watch CI, verify PyPI, deploy — done per-package, multiplied by 70 | **`scitex-dev ecosystem sync` + `check-versions` + `start-dashboard`** -- one-shot install/sync across hosts, version-mismatch detection, and a web dashboard with the live state |\n| 4 | **Bulk renames across 70 repos break cross-references** -- import paths, doc references, symlinks — `sed -i` corrupts something every time | **`scitex-dev rename-symbols`** -- atomic rename with cross-reference updates, regex support, dry-run preview, git-safety guards |\n| 5 | **Lint rules drift from the API they enforce** -- a renamed function in figrecipe leaves the rule pointing at a nonexistent symbol, and the bug only shows up months later | **`scitex-dev linter`** (engine, formerly `scitex-linter`) -- aggregates per-package rule plugins via the `scitex_dev.linter.plugins` entry point. Rules ship in the package whose API they enforce, so rename + rule + test land in one PR. Doc-block linting for `.py` / `.ipynb` / `.md` / `.rst`. `scitex-dev linter sweep` walks every package's README + docs in one shot |\n\n## Installation\n\n```bash\npip install scitex-dev\n\n# With CLI support:\npip install scitex-dev[cli]\n\n# With MCP server:\npip install scitex-dev[mcp]\n\n# Everything:\npip install scitex-dev[all]\n```\n\n### Configuration\n\nCopy [`.env.example`](.env.example) to `.env` (gitignored) at your\nproject root, then edit. CLI flags always override env vars. The full\nlist (with inline comments) lives in `.env.example`.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLocal state directories\u003c/strong\u003e\u003c/summary\u003e\n\n\u003cbr\u003e\n\nscitex-dev reads optional config + cache from the canonical SciTeX\nlocal-state locations:\n\n| Path                          | Scope         | Purpose                              |\n|-------------------------------|---------------|--------------------------------------|\n| `~/.scitex/dev/`              | user-global   | per-user config, cache               |\n| `\u003cproj-root\u003e/.scitex/dev/`    | project-local | overrides for the current repo       |\n\nProject-local wins when both exist. Both are optional.\n\n\u003c/details\u003e\n\n## Architecture\n\n```\nscitex_dev/\n├── _cli/\n│   ├── audit/                ← rule corpus (PA*, PS*, SK*, §*)\n│   │   ├── _api/             ← Python-API rules (PA-1xx)\n│   │   ├── _project/         ← project-structure rules (PS-1xx, PS-5xx)\n│   │   ├── _skills/          ← skill-file rules (SK-1xx)\n│   │   └── _summary/         ← CLI/MCP §-rules + audit-all wrapper\n│   ├── ecosystem/            ← cross-package commands (audit-all, list, …)\n│   └── _skills.py            ← `scitex-dev skills` group\n├── _ecosystem/               ← shared helpers (skill-quality, ECOSYSTEM map)\n├── _skills/                  ← canonical skill-file corpus shipped to agents\n└── testing/                  ← `audit_all_for_package` pytest helper\n```\n\nAudit rules live alongside the code they check. Each rule has a\ndocstring, an entry in `RULES`, a severity in `_SEVERITY_OVERRIDES`,\nand at least one unit test under `tests/.../_audit/_project/`.\n\n## Demo\n\n```mermaid\nflowchart LR\n    A[\"scitex-dev ecosystem\u003cbr/\u003eaudit-all \u003cpkg\u003e\"] --\u003e B[audit-cli]\n    A --\u003e C[audit-mcp-tools]\n    A --\u003e D[audit-skills]\n    A --\u003e E[audit-python-apis]\n    A --\u003e F[audit-project]\n    B \u0026 C \u0026 D \u0026 E \u0026 F --\u003e G{any error?}\n    G -- \"yes\" --\u003e H[\"exit 1\u003cbr/\u003e(CI fails)\"]\n    G -- \"no\" --\u003e I[\"exit 0\u003cbr/\u003e(CI green)\"]\n```\n\n`scitex-dev` is a CLI/audit tool — its \"demo\" is the audit running on a\npackage. Sample output (run on `scitex-io`):\n\n```\n=== audit-cli ===\nok    scitex-io: no CLI convention violations\n\n=== audit-mcp-tools ===\nok  scitex-io: no MCP convention violations\n\n=== audit-skills ===\nok  scitex-io: no skills violations\n\n=== audit-python-apis ===\nok  scitex-io: no Python API violations\n\n=== audit-project ===\nok  scitex-io: no project-structure violations\n```\n\nFailure mode (sample, scitex-dsp before the Hilbert fix):\n\n```\n=== audit-project ===\nfail  scitex-dsp (/home/ywatanabe/proj/scitex-dsp): 2 error(s)\n  [E] [PS-141 §1] README.md: missing mandatory `## Demo` section\n  [E] [PS-503 §5] examples/01_demo_out: no FINISHED_SUCCESS/\u003csession_id\u003e/ subdir\n```\n\nSee [`examples/`](examples/) for runnable demos that exercise\n`scitex-dev`'s own commands (search, version-management, docs\naggregation).\n\n## Four Interfaces\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePython API ⭐⭐\u003c/strong\u003e\u003c/summary\u003e\n\n```python\n# Version management\nfrom scitex_dev.fix import detect_mismatches, fix_local, fix_remote, verify_versions\nmismatches = detect_mismatches()\nfix_local(packages=[\"scitex-stats\"], confirm=True)\nverify_versions()\n\n# CI/CD\nfrom scitex_dev.ci import check_ci, get_failing_packages, check_pypi_publish\nstatus = check_ci()\nfailing = get_failing_packages()\n\n# Skills\nfrom scitex_dev.skills import list_skills, get_skill, export_skills\nskills = list_skills()\npage = get_skill(package=\"scitex-stats\")\nexport_skills()\n\n# Deployment\nfrom scitex_dev.deploy import deploy_scitex_cloud, verify_production\ndeploy_scitex_cloud(host=\"nas\", confirm=True)\n\n# Commit tracking\nfrom scitex_dev.versions import get_commits_since_tag\ncommits = get_commits_since_tag(\"scitex-stats\")\n\n# LLM-friendly types\nfrom scitex_dev import Result, supports_return_as\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cstrong\u003eCLI Commands ⭐⭐⭐ (primary)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Ecosystem management\nscitex-dev ecosystem list\nscitex-dev ecosystem list --versions\nscitex-dev ecosystem fix-mismatches --dry-run\nscitex-dev ecosystem sync\n\n# Documentation\nscitex-dev docs --package scitex-writer\nscitex-dev search-docs \"save figure\"\n\n# Bulk rename\nscitex-dev rename-symbols old_name new_name --dry-run\n\n# See all commands\nscitex-dev --help\nscitex-dev --help-recursive\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMCP Server ⭐⭐\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Start server\nscitex-dev mcp start\n\n# Check setup\nscitex-dev mcp doctor\nscitex-dev mcp list-tools\n\n# Installation info\nscitex-dev mcp installation\n```\n\n**Claude Code Setup** — add `.mcp.json` to your project root. Use `SCITEX_DEV_ENV_SRC` to load configuration from a `.src` file:\n\n```json\n{\n  \"mcpServers\": {\n    \"scitex-dev\": {\n      \"command\": \"scitex-dev\",\n      \"args\": [\"mcp\", \"start\"],\n      \"env\": {\n        \"SCITEX_DEV_ENV_SRC\": \"${SCITEX_DEV_ENV_SRC}\"\n      }\n    }\n  }\n}\n```\n\nSwitch environments via your shell profile:\n\n```bash\n# Local machine\nexport SCITEX_DEV_ENV_SRC=~/.scitex/dev/local.src\n\n# Remote server\nexport SCITEX_DEV_ENV_SRC=~/.scitex/dev/remote.src\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cstrong\u003eSkills ⭐⭐⭐ (primary)\u003c/strong\u003e\u003c/summary\u003e\n\n\u003cbr\u003e\n\nSkills provide workflow-oriented guides that AI agents query to discover capabilities and usage patterns.\n\n```bash\nscitex-dev skills list              # List available skill pages\nscitex-dev skills get SKILL         # Show main skill page\nscitex-dev skills export --package scitex-dev  # Export to Claude Code\n# Private skills (~/.scitex/*/skills/*-private/) are symlinked automatically\n```\n\n\u003e **[Full skills directory](https://github.com/ywatanabe1989/scitex-dev/tree/develop/src/scitex_dev/_skills)**\n\n| Skill | Content |\n|-------|---------|\n| `result-types` | `Result`, `ErrorCode`, `@supports_return_as` for LLM-friendly responses |\n| `cli-mcp-utils` | CLI and MCP utility helpers |\n| `config` | Package configuration and priority config patterns |\n| `versions` | Version management, mismatch detection and fixing |\n| `ecosystem` | Ecosystem list, sync, and commit workflows |\n| `rename` | Safe bulk rename with cross-reference updates |\n| `docs-search` | Documentation aggregation and unified search |\n| `test-runner` | Local and HPC test execution |\n| `full-update` / `full-update-deploy` | End-to-end audit → bump → release → sync pipelines |\n| `agentic-test-overview` / `-skills` / `-mcp` | Agent-vs-agent quality testing |\n| `dynamic-audit` | Cross-package periodic audit checklist |\n| `env-vars` | `SCITEX_DEV_*` / `SCITEX_*` environment variable reference |\n\n\u003c/details\u003e\n\n## Part of SciTeX\n\n`scitex-dev` is part of [**SciTeX**](https://scitex.ai). Install via\nthe umbrella with `pip install scitex[dev]` to use as\n`scitex.dev` (Python) or `scitex dev ...` (CLI).\n\nSciTeX follows the Four Freedoms for Research below, inspired by\n[the Free Software Definition](https://www.gnu.org/philosophy/free-sw.en.html):\n\n\u003eFour Freedoms for Research\n\u003e\n\u003e0. The freedom to **run** your research anywhere — your machine, your terms.\n\u003e1. The freedom to **study** how every step works — from raw data to final manuscript.\n\u003e2. The freedom to **redistribute** your workflows, not just your papers.\n\u003e3. The freedom to **modify** any module and share improvements with the community.\n\u003e\n\u003eAGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://scitex.ai\"\u003e\n    \u003cimg src=\"docs/scitex-icon-navy-inverted.png\" alt=\"SciTeX\" width=\"40\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fywatanabe1989%2Fscitex-dev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fywatanabe1989%2Fscitex-dev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fywatanabe1989%2Fscitex-dev/lists"}