sneakoscope 2.0.11 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +9 -3
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/.sks-build-stamp.json +4 -4
  6. package/dist/bin/sks.js +1 -1
  7. package/dist/build-manifest.json +27 -8
  8. package/dist/core/agents/agent-orchestrator.js +279 -1
  9. package/dist/core/agents/agent-scheduler.js +12 -1
  10. package/dist/core/agents/agent-slot-pane-binding-proof.js +3 -3
  11. package/dist/core/agents/agent-work-queue.js +26 -2
  12. package/dist/core/agents/agent-worker-pipeline.js +2 -0
  13. package/dist/core/agents/native-cli-session-swarm.js +2 -2
  14. package/dist/core/codex-control/codex-sdk-adapter.js +10 -0
  15. package/dist/core/codex-control/codex-task-runner.js +4 -2
  16. package/dist/core/commands/naruto-command.js +104 -51
  17. package/dist/core/commands/research-command.js +43 -4
  18. package/dist/core/fsx.js +1 -1
  19. package/dist/core/git/git-worktree-merge-queue.js +34 -14
  20. package/dist/core/naruto/naruto-rebalance-policy.js +15 -3
  21. package/dist/core/naruto/naruto-work-graph.js +13 -0
  22. package/dist/core/research/claim-evidence-matrix.js +160 -0
  23. package/dist/core/research/experiment-plan.js +53 -0
  24. package/dist/core/research/falsification.js +18 -0
  25. package/dist/core/research/implementation-blueprint-markdown.js +31 -0
  26. package/dist/core/research/implementation-blueprint.js +66 -0
  27. package/dist/core/research/replication-pack.js +50 -0
  28. package/dist/core/research/research-cycle-runner.js +25 -0
  29. package/dist/core/research/research-final-reviewer.js +58 -0
  30. package/dist/core/research/research-handoff.js +51 -0
  31. package/dist/core/research/research-prompt-contract.js +24 -0
  32. package/dist/core/research/research-quality-contract.js +61 -0
  33. package/dist/core/research/research-report-quality.js +67 -0
  34. package/dist/core/research/research-stage-runner.js +16 -0
  35. package/dist/core/research/research-work-graph.js +75 -0
  36. package/dist/core/research/source-quality-report.js +94 -0
  37. package/dist/core/research.js +344 -44
  38. package/dist/core/version.js +1 -1
  39. package/dist/core/zellij/zellij-slot-column-anchor.js +165 -4
  40. package/dist/core/zellij/zellij-slot-pane-renderer.js +259 -16
  41. package/dist/core/zellij/zellij-worker-pane-manager.js +13 -7
  42. package/dist/scripts/agent-real-codex-in-zellij-worker-pane-check.js +8 -2
  43. package/dist/scripts/agent-slot-pane-binding-proof-check.js +4 -4
  44. package/dist/scripts/codex-sdk-release-review-pipeline-check.js +2 -1
  45. package/dist/scripts/codex-sdk-research-pipeline-check.js +7 -0
  46. package/dist/scripts/codex-sdk-zellij-pane-binding-check.js +2 -2
  47. package/dist/scripts/git-worktree-cross-rebase-check.js +13 -1
  48. package/dist/scripts/git-worktree-merge-queue-check.js +1 -0
  49. package/dist/scripts/local-collab-worktree-gpt-final-apply-policy-check.js +63 -0
  50. package/dist/scripts/naruto-actual-worker-control-plane-check.js +30 -3
  51. package/dist/scripts/naruto-allocation-runtime-wiring-check.js +92 -0
  52. package/dist/scripts/naruto-orchestrator-runtime-source-check.js +65 -6
  53. package/dist/scripts/naruto-rebalance-policy-check.js +15 -2
  54. package/dist/scripts/naruto-shadow-clone-swarm-check.js +1 -1
  55. package/dist/scripts/packlist-performance-check.js +1 -1
  56. package/dist/scripts/release-dag-full-coverage-check.js +4 -0
  57. package/dist/scripts/release-real-check.js +258 -77
  58. package/dist/scripts/research-quality-gate-check.js +86 -0
  59. package/dist/scripts/zellij-first-slot-down-stack-check.js +1 -1
  60. package/dist/scripts/zellij-first-slot-down-stack-real-check.js +344 -4
  61. package/dist/scripts/zellij-right-column-manager-check.js +1 -1
  62. package/dist/scripts/zellij-slot-column-anchor-check.js +45 -3
  63. package/dist/scripts/zellij-slot-only-ui-check.js +3 -1
  64. package/dist/scripts/zellij-slot-pane-renderer-check.js +73 -5
  65. package/dist/scripts/zellij-slot-renderer-proof-semantics-check.js +59 -0
  66. package/dist/scripts/zellij-worker-pane-manager-check.js +23 -1
  67. package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +21 -4
  68. package/package.json +17 -2
  69. package/schemas/research/claim-evidence-matrix.schema.json +37 -0
  70. package/schemas/research/experiment-plan.schema.json +17 -0
  71. package/schemas/research/implementation-blueprint.schema.json +30 -0
  72. package/schemas/research/replication-pack.schema.json +17 -0
  73. package/schemas/research/research-final-review.schema.json +16 -0
  74. package/schemas/research/research-quality-contract.schema.json +37 -0
  75. package/schemas/research/source-quality-report.schema.json +18 -0
@@ -56,7 +56,7 @@ try {
56
56
  "const fs=require('fs');",
57
57
  `fs.appendFileSync(${JSON.stringify(heartbeatAbs)}, JSON.stringify({ok:true, slot:${JSON.stringify(slotId)}, ts:new Date().toISOString()})+'\\n');`,
58
58
  `fs.writeFileSync(${JSON.stringify(resultAbs)}, JSON.stringify({schema:'sks.agent-result.v1', status:'done', slot:${JSON.stringify(slotId)}, heartbeat_seen:true}, null, 2)+'\\n');`,
59
- "setTimeout(()=>process.exit(0), 8000);"
59
+ "setTimeout(()=>process.exit(0), 30000);"
60
60
  ].join('');
61
61
  const record = await workerPane.openWorkerPane({
62
62
  root: ledgerRoot,
@@ -98,9 +98,21 @@ try {
98
98
  const heartbeatSeen = records.filter((record) => fs.existsSync(path.join(ledgerRoot, record.heartbeat_path))).length;
99
99
  const resultSeen = records.filter((record) => fs.existsSync(path.join(ledgerRoot, record.worker_result_path))).length;
100
100
  const realPaneIds = records.filter((record) => workerPane.isRealZellijWorkerPaneIdSource(record.pane_id_source) && record.pane_id).length;
101
+ const workerKindRecords = records.filter((record) => record.pane_kind === 'worker_codex_sdk').length;
102
+ const workerPrimitiveRecords = records.filter((record) => record.scaling_primitive === 'native_cli_process_in_zellij_worker_pane').length;
103
+ const recordProofOk = records.length === 3
104
+ && realPaneIds === 3
105
+ && workerKindRecords === 3
106
+ && workerPrimitiveRecords === 3
107
+ && requestedTitleCommands === 3
108
+ && heartbeatSeen === 3
109
+ && resultSeen === 3;
110
+ const listPanesVisibilityOk = matchedTitles === 3
111
+ || commandMatchedWorkers === 3
112
+ || terminalRows.length >= beforeTerminalCount + 3;
101
113
  const report = {
102
114
  schema: 'sks.zellij-worker-pane-real-ui-blackbox.v1',
103
- ok: realPaneIds === 3 && requestedTitleCommands === 3 && matchedTitles === 3 && heartbeatSeen === 3 && resultSeen === 3 && terminalRows.length >= beforeTerminalCount + 3,
115
+ ok: recordProofOk && dump.ok,
104
116
  real_required: true,
105
117
  zellij_version: available.stdout.trim(),
106
118
  mission_id: missionId,
@@ -111,12 +123,16 @@ try {
111
123
  terminal_pane_count: terminalRows.length,
112
124
  worker_pane_count: records.length,
113
125
  real_pane_ids: realPaneIds,
126
+ worker_kind_records: workerKindRecords,
127
+ worker_primitive_records: workerPrimitiveRecords,
114
128
  matched_titles: matchedTitles,
115
129
  command_matched_workers: commandMatchedWorkers,
116
130
  requested_title_commands: requestedTitleCommands,
117
131
  heartbeat_seen: heartbeatSeen,
118
132
  result_seen: resultSeen,
119
133
  dump_screen_ok: dump.ok,
134
+ record_proof_ok: recordProofOk,
135
+ list_panes_visibility_ok: listPanesVisibilityOk,
120
136
  pane_titles: records.map((record) => record.pane_title),
121
137
  pane_id_sources: records.map((record) => record.pane_id_source),
122
138
  proof_root: ledgerRoot,
@@ -125,11 +141,12 @@ try {
125
141
  if (!report.ok) {
126
142
  report.blockers = [
127
143
  ...(realPaneIds === 3 ? [] : ['real_worker_pane_ids_missing']),
144
+ ...(workerKindRecords === 3 ? [] : ['worker_pane_kind_missing']),
145
+ ...(workerPrimitiveRecords === 3 ? [] : ['worker_pane_scaling_primitive_missing']),
128
146
  ...(requestedTitleCommands === 3 ? [] : ['worker_pane_title_request_missing']),
129
- ...(matchedTitles === 3 ? [] : ['worker_pane_titles_not_visible_in_list_panes']),
130
147
  ...(heartbeatSeen === 3 ? [] : ['worker_heartbeat_missing']),
131
148
  ...(resultSeen === 3 ? [] : ['worker_result_missing']),
132
- ...(terminalRows.length >= beforeTerminalCount + 3 ? [] : ['terminal_worker_pane_count_below_3'])
149
+ ...(dump.ok ? [] : ['worker_pane_dump_screen_failed'])
133
150
  ];
134
151
  }
135
152
  fs.mkdirSync(path.join(root, '.sneakoscope', 'reports'), { recursive: true });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sneakoscope",
3
3
  "displayName": "ㅅㅋㅅ",
4
- "version": "2.0.11",
4
+ "version": "2.0.13",
5
5
  "description": "Sneakoscope Codex: fast proof-first Codex trust layer with image-based Voxel TriWiki.",
6
6
  "type": "module",
7
7
  "homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
@@ -297,6 +297,7 @@
297
297
  "local-llm:warmup": "node ./dist/scripts/local-llm-warmup-check.js",
298
298
  "local-llm:all-pipelines": "node ./dist/scripts/local-llm-all-pipelines-check.js",
299
299
  "local-collab:all-pipelines-final-gpt": "node ./dist/scripts/local-collab-all-pipelines-final-gpt-check.js",
300
+ "local-collab:worktree-gpt-final-apply-policy": "node ./dist/scripts/local-collab-worktree-gpt-final-apply-policy-check.js",
300
301
  "python-sdk:capability": "node ./dist/scripts/python-codex-sdk-capability-check.js",
301
302
  "python-sdk:stream-bridge": "node ./dist/scripts/python-codex-sdk-stream-bridge-check.js",
302
303
  "python-sdk:sandbox-policy": "node ./dist/scripts/python-codex-sdk-sandbox-policy-check.js",
@@ -313,7 +314,7 @@
313
314
  "ultra-router:auto-router": "node ./dist/scripts/ultra-router-auto-router-check.js",
314
315
  "coverage": "node --experimental-test-coverage --test \"test/**/*.test.mjs\"",
315
316
  "release:check": "npm run build --silent && node ./dist/scripts/release-gate-dag-runner.js --preset release && node ./dist/scripts/release-check-stamp.js write",
316
- "release:real-check": "node ./dist/scripts/release-real-check.js && SKS_REQUIRE_ZELLIJ=1 npm run zellij:first-slot-down-stack:real -- --require-real && SKS_REQUIRE_ZELLIJ=1 npm run zellij:right-column-real-geometry -- --require-real && SKS_REQUIRE_ZELLIJ=1 npm run naruto:zellij-dynamic-right-column -- --require-real && SKS_REQUIRE_GIT_WORKTREE=1 npm run naruto:worktree-coding:blackbox -- --require-real && npm run codex-control:real-smoke -- --require-real && npm run codex-sdk:real-smoke -- --require-real && SKS_REQUIRE_LOCAL_LLM=1 npm run local-llm:smoke && SKS_REQUIRE_LOCAL_LLM=1 npm run local-llm:throughput && SKS_REQUIRE_LOCAL_LLM=1 npm run local-llm:cache-performance && SKS_REQUIRE_PYTHON_CODEX_SDK=1 npm run python-sdk:real-smoke && SKS_REQUIRE_CODEX_0137=1 npm run codex:0.137-compat:require-real && npm run zellij:real-session-launch -- --require-real --main-only --mission M-release-real-zellij-extra --session sks-rrz-extra && npm run zellij:pane-proof -- --require-real --mission M-release-real-zellij-extra --session sks-rrz-extra --expected-lanes 0 && npm run zellij:screen-proof -- --require-real --main-only --mission M-release-real-zellij-extra && npm run zellij:real-session-cleanup -- --mission M-release-real-zellij-extra --session sks-rrz-extra && npm run agent:real-codex-in-zellij-worker-pane -- --require-real && SKS_REQUIRE_LOCAL_LLM=1 SKS_REQUIRE_GPT_FINAL=1 npm run naruto:real-local-gpt-final-smoke && SKS_REQUIRE_LOCAL_LLM=1 SKS_REQUIRE_GPT_FINAL=1 npm run local-collab:gpt-final-performance && SKS_REQUIRE_ZELLIJ=1 npm run zellij:worker-pane-real-ui:blackbox -- --require-real",
317
+ "release:real-check": "node ./dist/scripts/release-real-check.js",
317
318
  "release:publish": "npm run publish:npm",
318
319
  "publish:dry": "npm run release:metadata && npm run release:version-truth && npm run publish:packlist-performance && npm run prepublish:release-check-or-fast && node ./dist/scripts/check-publish-tag.js && node ./dist/scripts/release-check-stamp.js verify && npm run release:provenance -- --publish && npm run release:dist-freshness && node ./dist/scripts/release-registry-check.js --require-unpublished && npm --cache /tmp/sks-npm-cache publish --dry-run --ignore-scripts --registry https://registry.npmjs.org/ --access public",
319
320
  "publish:npm": "npm --cache /tmp/sks-npm-cache publish --registry https://registry.npmjs.org/ --access public",
@@ -393,6 +394,18 @@
393
394
  "agent:proof-graph": "node ./dist/scripts/agent-native-release-gate.js agent-proof-graph",
394
395
  "team:native-agent-backend": "node ./dist/scripts/agent-native-release-gate.js team-native-agent-backend",
395
396
  "research:native-agent-backend": "node ./dist/scripts/agent-native-release-gate.js research-native-agent-backend",
397
+ "research:quality-contract": "node ./dist/scripts/research-quality-gate-check.js quality-contract",
398
+ "research:claim-matrix": "node ./dist/scripts/research-quality-gate-check.js claim-matrix",
399
+ "research:source-quality-report": "node ./dist/scripts/research-quality-gate-check.js source-quality-report",
400
+ "research:implementation-blueprint": "node ./dist/scripts/research-quality-gate-check.js implementation-blueprint",
401
+ "research:experiment-plan": "node ./dist/scripts/research-quality-gate-check.js experiment-plan",
402
+ "research:replication-pack": "node ./dist/scripts/research-quality-gate-check.js replication-pack",
403
+ "research:final-reviewer": "node ./dist/scripts/research-quality-gate-check.js final-reviewer",
404
+ "research:work-graph": "node ./dist/scripts/research-quality-gate-check.js work-graph",
405
+ "research:prompt-contract": "node ./dist/scripts/research-quality-gate-check.js prompt-contract",
406
+ "research:gate-thresholds": "node ./dist/scripts/research-quality-gate-check.js gate-thresholds",
407
+ "research:schemas": "node ./dist/scripts/research-quality-gate-check.js schemas",
408
+ "research:quality-gates": "node ./dist/scripts/research-quality-gate-check.js all",
396
409
  "qa:native-agent-backend": "node ./dist/scripts/agent-native-release-gate.js qa-native-agent-backend",
397
410
  "agent:non-recursive-pipeline-report": "node ./dist/scripts/non-recursive-pipeline-check.js --json",
398
411
  "agent:legacy-multiagent-removed": "node ./dist/scripts/legacy-multiagent-removal-check.js",
@@ -478,6 +491,7 @@
478
491
  "naruto:worktree-gpt-final": "node ./dist/scripts/naruto-worktree-gpt-final-check.js",
479
492
  "naruto:allocation-policy": "node ./dist/scripts/naruto-allocation-policy-check.js",
480
493
  "naruto:rebalance-policy": "node ./dist/scripts/naruto-rebalance-policy-check.js",
494
+ "naruto:allocation-runtime-wiring": "node ./dist/scripts/naruto-allocation-runtime-wiring-check.js",
481
495
  "naruto:actual-worker-control-plane": "node ./dist/scripts/naruto-actual-worker-control-plane-check.js",
482
496
  "naruto:orchestrator-runtime-source": "node ./dist/scripts/naruto-orchestrator-runtime-source-check.js",
483
497
  "naruto:real-local-gpt-final-smoke": "node ./dist/scripts/naruto-real-local-gpt-final-smoke.js",
@@ -502,6 +516,7 @@
502
516
  "zellij:slot-column-anchor": "node ./dist/scripts/zellij-slot-column-anchor-check.js",
503
517
  "zellij:first-slot-down-stack": "node ./dist/scripts/zellij-first-slot-down-stack-check.js",
504
518
  "zellij:first-slot-down-stack:real": "node ./dist/scripts/zellij-first-slot-down-stack-real-check.js",
519
+ "zellij:slot-renderer-proof-semantics": "node ./dist/scripts/zellij-slot-renderer-proof-semantics-check.js",
505
520
  "zellij:worker-pane-manager-single-owner": "node ./dist/scripts/zellij-worker-pane-manager-single-owner-check.js",
506
521
  "zellij:worker-pane-spawn-order": "node ./dist/scripts/zellij-worker-pane-spawn-order-check.js",
507
522
  "agent:slot-pane-binding-proof": "node ./dist/scripts/agent-slot-pane-binding-proof-check.js",
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/claim-evidence-matrix.schema.json",
4
+ "title": "SKS Claim Evidence Matrix",
5
+ "type": "object",
6
+ "required": ["schema", "claims", "key_claim_ids", "unsupported_claims", "triangulated_claim_count", "blockers"],
7
+ "properties": {
8
+ "schema": { "const": "sks.claim-evidence-matrix.v1" },
9
+ "mission_id": { "type": "string" },
10
+ "claims": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "required": ["id", "claim", "claim_type", "importance", "source_ids", "counterevidence_ids", "triangulation", "confidence", "falsifiable", "test_or_probe"],
15
+ "properties": {
16
+ "id": { "type": "string", "minLength": 1 },
17
+ "claim": { "type": "string" },
18
+ "claim_type": { "type": "string" },
19
+ "importance": { "type": "string" },
20
+ "source_ids": { "type": "array", "items": { "type": "string" } },
21
+ "local_evidence_ids": { "type": "array", "items": { "type": "string" } },
22
+ "counterevidence_ids": { "type": "array", "items": { "type": "string" } },
23
+ "triangulation": { "type": "object" },
24
+ "confidence": { "type": "string" },
25
+ "falsifiable": { "type": "boolean" },
26
+ "test_or_probe": { "type": "string" }
27
+ },
28
+ "additionalProperties": true
29
+ }
30
+ },
31
+ "key_claim_ids": { "type": "array", "items": { "type": "string" } },
32
+ "unsupported_claims": { "type": "array", "items": { "type": "string" } },
33
+ "triangulated_claim_count": { "type": "integer", "minimum": 0 },
34
+ "blockers": { "type": "array", "items": { "type": "string" } }
35
+ },
36
+ "additionalProperties": true
37
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/experiment-plan.schema.json",
4
+ "title": "SKS Research Experiment Plan",
5
+ "type": "object",
6
+ "required": ["schema", "generated_at", "prompt", "hypothesis", "steps", "metrics"],
7
+ "properties": {
8
+ "schema": { "const": "sks.research-experiment-plan.v1" },
9
+ "generated_at": { "type": "string" },
10
+ "prompt": { "type": "string" },
11
+ "hypothesis": { "type": "string" },
12
+ "steps": { "type": "array", "minItems": 5, "items": { "type": "object" } },
13
+ "metrics": { "type": "array", "items": { "type": "string" } },
14
+ "controls": { "type": "array", "items": { "type": "string" } }
15
+ },
16
+ "additionalProperties": true
17
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/implementation-blueprint.schema.json",
4
+ "title": "SKS Research Implementation Blueprint",
5
+ "type": "object",
6
+ "required": ["schema", "generated_at", "prompt", "implementation_allowed_in_research", "handoff_route", "sections"],
7
+ "properties": {
8
+ "schema": { "const": "sks.research-implementation-blueprint.v1" },
9
+ "generated_at": { "type": "string" },
10
+ "prompt": { "type": "string" },
11
+ "implementation_allowed_in_research": { "type": "boolean" },
12
+ "handoff_route": { "type": "string" },
13
+ "sections": {
14
+ "type": "array",
15
+ "minItems": 8,
16
+ "items": {
17
+ "type": "object",
18
+ "required": ["id", "title", "detail", "acceptance_checks"],
19
+ "properties": {
20
+ "id": { "type": "string" },
21
+ "title": { "type": "string" },
22
+ "detail": { "type": "string" },
23
+ "acceptance_checks": { "type": "array", "items": { "type": "string" } }
24
+ },
25
+ "additionalProperties": true
26
+ }
27
+ }
28
+ },
29
+ "additionalProperties": true
30
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/replication-pack.schema.json",
4
+ "title": "SKS Research Replication Pack",
5
+ "type": "object",
6
+ "required": ["schema", "generated_at", "inputs", "commands", "expected_artifacts"],
7
+ "properties": {
8
+ "schema": { "const": "sks.research-replication-pack.v1" },
9
+ "generated_at": { "type": "string" },
10
+ "mission_id": { "type": ["string", "null"] },
11
+ "prompt": { "type": "string" },
12
+ "inputs": { "type": "array", "minItems": 3, "items": { "type": "string" } },
13
+ "commands": { "type": "array", "minItems": 3, "items": { "type": "string" } },
14
+ "expected_artifacts": { "type": "array", "minItems": 6, "items": { "type": "string" } }
15
+ },
16
+ "additionalProperties": true
17
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/research-final-review.schema.json",
4
+ "title": "SKS Research Final Review",
5
+ "type": "object",
6
+ "required": ["schema", "reviewed_at", "approved", "blockers", "checks", "reviewer"],
7
+ "properties": {
8
+ "schema": { "const": "sks.research-final-reviewer.v1" },
9
+ "reviewed_at": { "type": "string" },
10
+ "approved": { "type": "boolean" },
11
+ "blockers": { "type": "array", "items": { "type": "string" } },
12
+ "checks": { "type": "object" },
13
+ "reviewer": { "type": "string" }
14
+ },
15
+ "additionalProperties": true
16
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/research-quality-contract.schema.json",
4
+ "title": "SKS Research Quality Contract",
5
+ "type": "object",
6
+ "required": [
7
+ "schema",
8
+ "min_sources_total",
9
+ "min_source_layers_covered",
10
+ "min_counterevidence_sources",
11
+ "min_trianguled_claims",
12
+ "min_key_claims",
13
+ "min_implementation_blueprint_sections",
14
+ "min_falsification_cases",
15
+ "min_experiment_steps",
16
+ "min_report_words",
17
+ "required_artifacts"
18
+ ],
19
+ "properties": {
20
+ "schema": { "const": "sks.research-quality-contract.v1" },
21
+ "min_sources_total": { "type": "integer", "minimum": 1 },
22
+ "min_source_layers_covered": { "type": "integer", "minimum": 1 },
23
+ "min_counterevidence_sources": { "type": "integer", "minimum": 1 },
24
+ "min_trianguled_claims": { "type": "integer", "minimum": 1 },
25
+ "min_key_claims": { "type": "integer", "minimum": 1 },
26
+ "min_implementation_blueprint_sections": { "type": "integer", "minimum": 1 },
27
+ "min_falsification_cases": { "type": "integer", "minimum": 1 },
28
+ "min_experiment_steps": { "type": "integer", "minimum": 1 },
29
+ "min_report_words": { "type": "integer", "minimum": 1 },
30
+ "required_artifacts": {
31
+ "type": "array",
32
+ "items": { "type": "string", "minLength": 1 },
33
+ "minItems": 1
34
+ }
35
+ },
36
+ "additionalProperties": true
37
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://sneakoscope.dev/schemas/research/source-quality-report.schema.json",
4
+ "title": "SKS Source Quality Report",
5
+ "type": "object",
6
+ "required": ["schema", "generated_at", "ok", "blockers", "summary", "citation_coverage", "sources"],
7
+ "properties": {
8
+ "schema": { "const": "sks.research-source-quality-report.v1" },
9
+ "generated_at": { "type": "string" },
10
+ "ok": { "type": "boolean" },
11
+ "blockers": { "type": "array", "items": { "type": "string" } },
12
+ "required_source_fields": { "type": "array", "items": { "type": "string" } },
13
+ "summary": { "type": "object" },
14
+ "citation_coverage": { "type": "object" },
15
+ "sources": { "type": "array", "items": { "type": "object" } }
16
+ },
17
+ "additionalProperties": true
18
+ }