diff --git a/README.md b/README.md index 9b56734..099ad2f 100644 --- a/README.md +++ b/README.md @@ -99,3 +99,5 @@ communication treatment is off. Unrelated automatic packages remain available. The owner retains publication identity/order, mandatory status, complete durable artifacts, verification and Operator acceptance. These packages customize answer/detail/example/acknowledgement presentation only. + +The automatic `research-auto` Planner package supplies primary-source selection, preferred-domain exploration/refinement and evidence-reading methodology, publication/version checking, corroboration and already-admitted empirical evidence methods. The manual `research` package remains available on request. Tool arguments, budgets, continuation, recovery and untrusted research provenance belong to the owner. diff --git a/packages/research-auto/SKILL.md b/packages/research-auto/SKILL.md new file mode 100644 index 0000000..7418c44 --- /dev/null +++ b/packages/research-auto/SKILL.md @@ -0,0 +1,23 @@ +--- +name: research-auto +description: Source selection and reading methods for assigned Planner research. +metadata: + relayview-display-name: Research methodology + relayview-version: 0.12.2 +--- + +# Research methodology + +Prefer primary sources: applicable official documentation, specifications, source code, release notes, maintainer records, and reproducible first-party artifacts that own a claim; use secondary sources for orientation and corroboration. When an applicable authoritative domain is already known, preferredDomains may rank it higher; omit the option during broad exploration and refine a later search after discovering the right domain. Prefer narrow publisher hosts over broad multi-tenant hosts, and inspect/fetch returned sources before relying on them. + +When external research is material, use web_search to discover candidate public sources before web_fetching selected applicable evidence instead of guessing a destination URL. + +Check publication date, applicable product and version, and whether a source supports the precise claim. State uncertainty, conflicts, missing access, and inferences explicitly. + +Corroborate consequential or surprising claims with independent evidence when practical; mirrors, syndication, repetition, and pages derived from one upstream source are not independent. + +For an empirically testable technical claim, prefer a small reproducible local experiment only when this role already has an approved execution capability. Record the question, procedure, relevant versions and resolved paths, observation, and limitations; do not generalize beyond the tested environment. + +Use confidence language proportional to the evidence and identify claims that still depend on provider ranking, inaccessible sources, or unverified assumptions. + +Repeat an exact query only when the cached result is intentionally sufficient; use a materially narrower query when new terms, version, claim, or source scope justify a distinct auditable search. diff --git a/packages/research-auto/relayview-skill.json b/packages/research-auto/relayview-skill.json new file mode 100644 index 0000000..be9ac90 --- /dev/null +++ b/packages/research-auto/relayview-skill.json @@ -0,0 +1,15 @@ +{ + "schemaVersion": 1, + "source": { + "kind": "first-party", + "reference": "v0.12.2" + }, + "role": "planner", + "step": "planning", + "files": [ + { + "path": "SKILL.md", + "sha256": "112036daeb1f760093345805b8c17b1f385723f3597608cf8ad19d72023ccd74" + } + ] +} diff --git a/tests/test_packages.py b/tests/test_packages.py index c772be1..22d6370 100644 --- a/tests/test_packages.py +++ b/tests/test_packages.py @@ -12,6 +12,17 @@ ROOT = Path(__file__).resolve().parents[1] class PackageTests(unittest.TestCase): + def test_research_auto_contains_only_extracted_method(self): + package = ROOT / "packages/research-auto" + check_package(package) + text = (package / "SKILL.md").read_text() + self.assertIn("omit the option during broad exploration", text) + self.assertIn("inspect/fetch returned sources", text) + self.assertIn("Check publication date", text) + self.assertIn("Corroborate consequential", text) + self.assertNotIn("spawn", text) + self.assertNotIn("save a research file", text) + def test_communication_packages_declare_their_treatment(self): for role in ("planner", "implementer", "reviewer"): package = ROOT / f"packages/{role}-communication"