Fully Automated Submission Venue Selector Skill Plan
This is an implementation plan, not current implemented behavior.
Scope And Review Status
Create a runtime-backed skill named submission-venue-selector that can run a
fully automated venue-selection workflow for an existing scholarly draft. The
final acceptance target is installation across Codex, Claude, DeepSeek,
explicit Copilot, and OpenClaw, with Linux, macOS, WSL, Windows PowerShell, and
Windows PowerShell runtime coverage.
Independent review found that current OpenClaw runtime-backed installs are blocked by the installer until neutral runtime evidence and target-specific OpenClaw gates exist. Therefore this plan keeps all-target support as a final acceptance requirement, but sequences OpenClaw enablement before any “all targets done” claim. Until that phase lands, OpenClaw tests must assert an expected block, not a false pass.
Skill Contract
Add
canonical/skills/submission-venue-selector/SKILL.md.Frontmatter:
name: submission-venue-selectordescription: Use when selecting, ranking, or validating submission venues for an existing scholarly manuscript or draft venue shortlist. Do not use for generic draft review, rewriting, paper retrieval, paper download, Zotero mutation, or one-off venue facts.
Keep
SKILL.mdconcise and move details into progressive-disclosure references:references/provider-policy.mdreferences/artifact-schema.mdreferences/scoring-rubric.mdreferences/report-contract.mdreferences/privacy-and-network-policy.md
Add optional
agents/openai.yamlonly if the repo has a current convention for deterministic skill UI metadata.
The skill composes with existing research skills for workflow guidance, but the
runtime helper owns the automation. paper-lookup is reference guidance, not
an executable provider client. The selector must implement its own explicit
provider registry/client layer.
CLI Surface
All commands accept --dir <workspace>. Commands that can call public services
are local/offline by default and require explicit network flags.
init --dir <workspace> --draft <path>plan --dir <workspace>extract --dir <workspace>privacy-gate --dir <workspace>providers --check --dir <workspace>resolve --dir <workspace> [--allow-network] [--allow-provider <name>]expand --dir <workspace> --max-hop 1 --max-papers <n> [--allow-network]venues --dir <workspace> [--allow-network]recent --dir <workspace> --years 5 --per-venue <n> [--allow-network]score --dir <workspace>report --dir <workspace>validate --dir <workspace>purge --dir <workspace>run --dir <workspace> --draft <path> [--allow-network]smoke
Shared options:
--offline: force fixture/cache-only behavior.--fixture-dir <path>: use committed or test fixtures.--max-requests <n>and--timeout <seconds>: bound live calls.--cache-dir <path>,--force,--refresh-cache, and--no-cache: accepted for compatibility but refused. This runtime keeps no provider cache, so the three cache flags name a store that does not exist, and--forcereads as an override of a delivery gate that is evidence-based and not forceable. Each exits 2 with that reason rather than parsing cleanly and controlling nothing.--retain-draft-text: allow raw draft text in artifacts.--allow-downloads,--allow-zotero-mutation, and--allow-unpaywall-email: accepted for compatibility but refused. No download, Zotero-mutation, or Unpaywall provider is implemented in this runtime, so passing one exits 2 with the routing target rather than granting a capability that does not exist.
Exit/status semantics:
ready: exit 0, all mandatory validation and delivery gates pass.ready-with-caveats: exit 0 with warnings, evidence gaps are explicit and non-rank-critical.not-ready: exit 1, validation finds unsupported, stale, missing, or unsafe claims/artifacts.
Automation Workflow
init: create a private workspace, reject unsafe workspace locations by default, hash the draft, and createrun_status.json.plan: createselection_plan.jsonwith field/topic constraints, venue type constraints, request budgets, scoring weights, and assumptions.extract: parse.bib,.tex, markdown/text, and Docling-exported text fixtures without network calls.privacy-gate: default drafts tounpublished, generatequeries.jsonl, and block network if queries contain raw draft sentences, novel theorem/section names, acknowledgments, author emails, or full abstracts.providers --check: writeprovider_status.jsonwith provider capabilities, auth/email state, rate limits, configured domains, and cache policy.resolve: resolve references by DOI, title, PMID/arXiv ID, or other identifiers using the provider capability matrix.expand: expand only from resolved seeds and record edge type:reference,citation,co_citation,bibliographic_coupling,provider_related, ortopic_search.venues: normalize publication venues while separating journals, conference series, conference instances, proceedings containers, preprint servers, repositories, and currently open submission venues.recent: collect recent venue papers with logged provider queries, total hits, sampling method, year distribution, and topic similarity thresholds.score: apply hard eligibility gates first, then deterministic weighted soft criteria with evidence IDs and sensitivity analysis.report: producerecommendation.mdwith observed evidence separated from inferred fit, embeddedReview Findings, and an embeddedDelivery Check.validate: enforce schemas, cross-references, privacy rules, current-source freshness, delivery status, and no unsupported rank-affecting claims.
Provider Registry
Replace linear fallback with a capability matrix. Each provider record must define supported capabilities, domains, auth requirements, rate/pacing policy, cache TTL, freshness policy, and downgrade behavior.
Required capabilities:
resolve_by_doiresolve_by_titlevenue_recent_by_sourcecitation_refscitation_citersbiomed_relatedpreprint_published_linkoa_status
Provider-specific policy:
OpenAlex: default broad metadata source when allowed; support works, sources, references, and recent source queries; record API-key/credit status.
Crossref: support DOI/title/container metadata; use polite-pool metadata when configured; record member/ISSN data and 429/403 responses.
Semantic Scholar: optional unless configured; record fields requested and citation/reference pagination truncation.
arXiv: Atom XML and 3-second pacing; use only for arXiv identifiers or explicit topic/preprint expansion.
bioRxiv/medRxiv: use endpoint/pagination constraints; do not treat as keyword search unless supported by the provider client.
PubMed/PMC: biomedical metadata/related/reference coverage only; do not treat PubMed related articles as citation edges.
Unpaywall: DOI-first OA status only; never fetch PDFs; store only
email_configured: true, not the email address.
Artifact Schemas
Use closed JSON/JSONL schemas with schema_version, stable IDs, timestamps,
status enums, provenance, and unknown-field rejection. Reject duplicate IDs and
broken cross-references. Reuse the deep-research style of stable S*, C*,
E*, and G* IDs where applicable.
Required artifacts:
run_status.jsonselection_plan.jsondraft.jsonreferences.jsonlpapers.jsonlsources.jsonlqueries.jsonlprovider_status.jsonevidence.jsonlclaims.jsonlguards.jsonlvenues.jsonlvenue_profiles.jsonlrecent_papers.jsonlscores.jsonldelivery.jsonrecommendation.md
Required schema details:
draft.json:draft_id, tokenized or relativedraft_path,draft_hash,sensitivity_class,redaction_status,artifact_visibility, and structural metadata. Raw text is forbidden unless--retain-draft-textis used.references.jsonl:reference_id,raw_citation, normalized bibliographic fields, provider IDs,resolution_status(resolved,ambiguous,unresolved,not_a_paper,excluded),candidate_work_ids,selected_work_id, andresolution_reason.sources.jsonl:source_id,provider,source_url,query,cache_key,retrieved_at,current_as_of,staleness_policy, and response metadata.evidence.jsonl:evidence_id,evidence_type,source_ids,paper_ids,venue_ids,claim_ids,provider,query_id,artifact_ref,summary,created_at,inspection_status,confidence, andlimitations.venues.jsonl:venue_id,canonical_name,venue_type,venue_series,venue_instance,submission_cycle,aliases,issn,eissn,issn_l,openalex_source_id,crossref_member,s2_publication_venue_id,nlm_ta,publisher_or_org,sponsor,homepage_url,scope_text,submission_url,current_as_of,eligibility_status,exclusion_reason,classification_evidence_ids, andprovenance_evidence_ids.venue_profiles.jsonl: aims/scope, article types, review model, deadlines/frequency, APC/OA policy, indexing, length constraints, audience, exclusion criteria, recent-paper sample metadata, and evidence IDs for every field.scores.jsonl:score_id,venue_id,rubric_version, hard eligibility gates,criteria[],criterion_id,weight,raw_score,normalized_score,evidence_ids,missing_data_policy,confidence,sensitivity_result,tie_breaker, andrationale.delivery.json:delivery_status,review_findings_ref,delivery_check_ref, unsupported-claim count, stale-source count, privacy finding count, and downgrade reasons.
Privacy, Network, And Mutation Policy
init,plan,extract,privacy-gate,score,report,validate, andsmokemust run locally by default.Network calls require
--allow-networkplus explicit allowed providers.Provider requests must be HTTPS-only, use domain allowlists, timeouts, response-size caps, request caps, and redacted logs.
Credentials are never copied into artifacts. Store symbolic refs and booleans only, such as
semantic_scholar_key_configured: true.Workspaces must be created with private permissions where supported (
0700dirs,0600files). Reject workspaces inside the repo checkout, canonical runtime source, agent skill directories, or known synced folders unless--unsafe-workspace-okis explicit.purgeremoves raw caches and draft-derived local artifacts without touching source files.Zotero integration must be read-only by default. Allowlist only non-mutating lookup operations; forbid
add,update,get,sync-cache,create-collection,trash,empty-trash, WebDAV uploads/downloads, and staging writes unless explicit mutation/download flags are set.Downloads stay out of MVP. If later added, require safe zip member validation, basename-only extraction, no absolute paths or
.., PDF magic checks, size caps, quarantine directories, and malicious-archive tests.
Runtime And OS Support
Add runtime files under
canonical/runtime/skills/submission-venue-selector/:
submission_venue_selector.pyrun_submission_venue_selector.shrun_submission_venue_selector.ps1run_submission_venue_selector.ps1fixture files under a safe runtime fixture path, avoiding denied names such as
config.*,provider*,.env, PDFs, DBs, and archives.
Runtime manifest requirements:
Add
submission-venue-selectortomanifest/runtime.yamlruntime_profiles.full.skills.Add source/target entries for all runtime files:
.py: all platforms,lf,0644.sh: Linux/macOS/WSL,lf,0755.ps1: Windows,crlf,0644.ps1: Windows,lf,0644
Add a
runtime-smoke.v1contract with command keys forlinux,macos,wsl,windows, andwindows_ps1.Add
submission-venue-selectoroutput validation ininstaller/ai_agents_skills/runtime_smoke.py. The smoke JSON must include:status=ok,smoke_mode=offline,network_required=false,live_api_attempted=false,package_install_attempted=false,config_written=false,real_secrets_read=false, and canary non-leakage.Add unit tests that monkeypatch or block
socket,urllib, andrequestsin smoke/offline paths.
Wrapper requirements:
POSIX wrapper must avoid shell-specific assumptions beyond the repo’s existing POSIX runner convention.
PowerShell wrapper must invoke Python as
& $python $script @SkillArgs, not by reconstructing a command string.CMD wrapper must use the robust env-argument marshalling pattern used by runtime-backed skills with path-heavy CLIs, not naive
%*forwarding.
Install Targets
Codex, Claude, DeepSeek, and OpenCode:
Normal skill install with runtime files managed by the shared runtime root.
Manifest support must include active skill loading and runtime actions.
Copilot:
Default-detected adapter install when the Copilot home exists.
No unsupported instruction, template, command, hook, plugin, or management artifacts.
Add explicit tests for Copilot install selection and blocked artifact classes.
OpenClaw:
Final target is supported installation, but current runtime-backed OpenClaw support is blocked until global OpenClaw gates are implemented.
Required OpenClaw enablement phase:
validate_openclaw_runtime_rootrejects roots under.openclaw,.codex,.claude,.deepseek, repo checkouts, workspaces, unsafe mounts, world-writable paths, and active loader/config/runtime areas.Add schema-backed support-file metadata, for example
manifest/openclaw/target-support-files/submission-venue-selector.json.Add target-evidence schema/versioning for OpenClaw loader evidence, inertness evidence, helper invocation evidence, runtime-root evidence, and artifact-specific support-file evidence.
Add immutable approval manifest binding, target/runtime realpath binding, pre-state hashes, quiescence/lock checks, and write-time pre-state rechecks.
Preserve the generic fail-closed OpenClaw runtime-backed block until the scoped gate passes.
Tests before enablement must assert OpenClaw is expected-blocked for this runtime-backed skill. Tests after enablement must prove fake-root lifecycle, no forbidden artifacts, no real
.openclawruntime writes, and correct rollback.
Manifest, Dependencies, And Generated Docs
Implementation must update:
manifest/skills.yaml: skill entry,supported_agents, dependencies, and profiles.manifest/profiles.yaml: reciprocal profile membership. Prefer adding tofull-researchfirst; add toserious-researchonly after trigger and smoke behavior are stable, or create a narrower venue-selection profile.manifest/runtime.yaml: runtime files, smoke contract, andruntime_profiles.full.skills.manifest/dependencies.yaml: use existingpython-runtimeandrequests-python-package; makerequests-python-packagerequired unless a stdliburllibprovider fallback is implemented.manifest/system-dependencies.yaml: addsubmission-venue-selectortopython-runtime.used_byand to packageused_bylists if imports require them.installer/ai_agents_skills/docs.py: updatewrite_readme, and any relevant generatedinstallation_text,verification_text,architecture_text, andagent_locations_textsections.docs/source/index.md: add a toctree entry for this plan if it remains a public docs page.README.mdanddocs/: regenerate withmake docs.
This plan document is a public docs page and must exist as both
docs/submission-venue-selector-plan.md and
docs/source/submission-venue-selector-plan.md with identical content.
User-Facing Examples
Add exact POSIX and Windows examples in SKILL.md, generated docs, and README
navigation. Examples must cover:
full automated run
planning-only run
provider check with no network
validate existing workspace
interpret
ready,ready-with-caveats, andnot-readypurge private artifacts
Example POSIX command:
bash ~/.codex/runtime/run_skill.sh \
skills/submission-venue-selector/run_submission_venue_selector.sh \
run --dir ~/venue-selection/run-001 --draft ~/drafts/paper.tex --offline
Example PowerShell command:
& "$env:USERPROFILE\.codex\runtime\workspace\skills\submission-venue-selector\run_submission_venue_selector.ps1" `
run --dir "$env:USERPROFILE\venue-selection\run-001" `
--draft "$env:USERPROFILE\drafts\paper.tex" --offline
Test Plan
Runtime unit tests:
initcreates private workspace scaffolding and never stores raw draft text by default.plancreates deterministicselection_plan.json.extracthandles.bib,.tex, markdown/text, and Docling-exported text fixtures.privacy-gateblocks unsafe provider queries for unpublished drafts.providers --checkwrites provider capability/status records without reading real secrets in offline/smoke mode.resolvehandles fixture responses and ambiguous candidates.expandrespects hop, paper, provider, and edge-type caps and records truncation.venuesnormalizes aliases, ISSNs, OpenAlex/Crossref/Semantic Scholar/PubMed identifiers, and conference series/instances.recentrecords query, sample, year, and topic-threshold metadata.scoreis deterministic and records component evidence.reportembeds review findings and delivery check.validatecoversready,ready-with-caveats, andnot-ready.purgeremoves derived private artifacts only.smokeis offline JSON and attempts no network, config, secrets, package install, downloads, or mutations.
Provider-failure fixtures:
missing Crossref mailto, Crossref 429/403
OpenAlex exhausted credits
Semantic Scholar omitted fields and paginated citation truncation
arXiv XML parsing and pacing
bioRxiv unsupported keyword-search request
NCBI missing tool/email
Unpaywall placeholder email/422
duplicate venues with print/eISSN
renamed journals
ambiguous conference acronyms
preprint server/repository mistaken for venue
Installer and manifest tests:
tests/test_installer.py: manifest entry, supported agents, dependencies, reciprocal profile membership, Copilot explicit behavior, and OpenClaw expected-block/enablement behavior.tests/test_runtime_integration.py: runtime file coverage, command targets for Linux/macOS/WSL/Windows/Windows PowerShell, newline/mode policies, full runtime profile membership, and smoke contract shape.Runtime smoke validator tests for
submission-venue-selectorJSON fields and canary non-leakage.Docs tests proving the public plan page is in both root/source docs, in the Sphinx toctree, and current after
make docs.Fake-root lifecycle tests must fail if a requested target silently produces no managed skill action without an expected skip/block reason.
Native OS verification:
Linux POSIX runtime smoke.
macOS POSIX runtime smoke.
Windows PowerShell runtime smoke.
Windows PowerShell runtime smoke.
WSL POSIX runtime smoke, or a documented WSL layout-only limitation until a real WSL job exists.
Required verification before claiming implementation complete:
make docs
git diff --exit-code -- README.md docs
make docs-site
make test
make runtime-smoke ARGS="--skills submission-venue-selector"
make fake-root-lifecycle ARGS="--skill submission-venue-selector --platform-shape all"
make fake-root-lifecycle ARGS="--agents codex,claude,deepseek,copilot,openclaw --skill submission-venue-selector --platform-shape all"
The final all-target lifecycle command is allowed to pass with an explicit
OpenClaw expected-block only before the OpenClaw enablement phase. After that
phase, it must prove OpenClaw fake-root install, verify, uninstall, and rollback
without forbidden artifacts or runtime writes under .openclaw.
Acceptance Criteria
Full automation can produce a venue recommendation dossier without manual ranking.
All rank-affecting claims are backed by evidence IDs.
Draft privacy gates are enforced before network calls.
Provider capability gaps are visible and affect delivery status.
Recommendations do not claim acceptance probability or prestige unless backed by explicit evidence and allowed by the rubric.
Runtime-backed installation is validated for every final install target and OS runtime path.
OpenClaw is not claimed complete until the repo’s runtime-backed OpenClaw gates are implemented and verified.