Skip to content

Commit 01ed3d7

Browse files
Grace Lee Rui YueGrace Lee Rui Yue
authored andcommitted
Merge remote-tracking branch 'github-main/main' into HEAD
2 parents e287782 + 1a5048c commit 01ed3d7

52 files changed

Lines changed: 3858 additions & 60 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,60 @@
11
---
22
name: jacobian-math
3-
description: Use Jacobian for specialized exact mathematics, including matrix determinants, polynomial or symbolic computation, structural analysis, counterexamples, bounded search, formal inspection, and requested independent verification. Trigger on relevant math tasks even when the user does not name Jacobian and shell code could calculate the answer.
3+
description: Use Jacobian for exact mathematics, matrix determinants, symbolic computation, structural analysis, counterexamples, bounded search, and independent verification. Trigger on relevant math tasks even when the user does not name Jacobian.
44
---
55

66
# Jacobian Math
77

88
<!-- Managed by Jacobian's Codex integration. -->
99

10-
In Codex Code Mode, call the nested methods
10+
In Code Mode, call
1111
`tools.mcp__jacobian__math_find(...)` and
1212
`tools.mcp__jacobian__math_run(...)` directly. Do not enumerate, filter, or
13-
print `ALL_TOOLS`; that loads matching tool descriptions into context. Return
14-
only the typed projection when available:
13+
print `ALL_TOOLS`. Return the typed projection when available:
1514

1615
```js
1716
const r = await tools.mcp__jacobian__math_find({query: "...", limit: 3});
1817
text(r.structuredContent ?? r);
1918
```
2019
21-
Use Jacobian for each requested exact mathematical outcome, even when small or
22-
shell-solvable. Keep decomposition and routing decisions agent-owned;
23-
composing already-known supporting operations remains allowed when clearer.
20+
Use Jacobian for each requested exact mathematical outcome, even when small.
21+
Keep decomposition and routing decisions agent-owned; composing already-known
22+
supporting operations remains allowed when clearer.
2423
Do not call Jacobian for definitions, formatting, or non-execution tasks.
2524
26-
Call `math.run` directly when the requested local outcome exactly matches these
27-
stable built-in contracts; replace examples but preserve JSON types:
25+
Call `math.run` directly for these stable contracts, preserving JSON types:
2826
29-
- `integer.compute.gcd`, `integer.compute.lcm`, or
30-
`integer.compute.extended_gcd` in `EXPLORE` mode:
27+
- `integer.compute.gcd`, `integer.compute.lcm`, or `integer.compute.extended_gcd`:
3128
`{"left":"84","right":"30"}`.
32-
- `matrix.determinant.compute` or `matrix.rank.compute` in `EXPLORE` mode:
29+
- `matrix.determinant.compute` or `matrix.rank.compute`:
3330
`{"matrix":{"domain":"QQ","entries":[[{"num":"1","den":"1"}]]}}`.
3431
- `polynomial.compute.gcd` in `EXPLORE` mode: payload keys are `left` and
3532
`right`; each value has shape
3633
`{"polynomial_schema_version":"1","domain":"QQ","variables":["x"],"polynomial":{"terms":[{"coefficient":{"num":"1","den":"1"},"exponents":[2]}]}}`.
37-
- For a requested independent determinant check,
38-
`matrix.determinant.verify` in `VERIFY` mode:
34+
- `matrix.determinant.verify` in `VERIFY` mode for an independent check:
3935
`{"determinant_uri":"<determinant_uri from compute output>"}`.
4036
41-
For other outcomes or unfamiliar payloads, use `math.find` with a specific
42-
plain-language outcome and implied domain or mode; no capability ID is required.
37+
For other outcomes, use `math.find` with a specific plain-language outcome;
38+
no capability ID is required.
4339
Use low `limit` values. For a selected operation's schema, call
4440
`math.find({"capability_id":"<exact-id>","view":"CONTRACT"})`; never send
4541
`mode: "CONTRACT"` to `math.run` or put `CONTRACT` in a query. A card's
4642
`invocation_example`, or required top-level fields, may be enough.
4743
4844
Do not add a discovery domain filter unless its exact installed spelling is
49-
known. When discovery exposes recovery paths, follow those fields (for example,
50-
`remove_unknown_domain_filter`, `remove_filters`, or `reformulate_query`) before
45+
known. Follow exposed recovery paths such as removing unknown filters or
46+
reformulating the query before
5147
treating absence as final. After invalid input, correct the reported constraint
52-
and retry within the task resource bounds as further errors appear. If one
53-
provider is unavailable, continue with other installed routes that can produce
54-
the outcome. Treat timeouts as non-conclusions. Accept only a completed result
55-
whose scope covers the input, and carry forward the smallest decisive value,
56-
witness, status, assurance, completeness, and open obligations; preserve artifact
57-
refs, including verification record URIs.
48+
and retry within the task resource bounds. If
49+
one provider is unavailable, continue with other installed routes that can
50+
produce the outcome. Treat timeouts, cancellations, errors, incomplete searches,
51+
and missing witnesses as non-conclusions. Accept only a completed
52+
result whose scope covers the input, and carry forward the smallest decisive
53+
value, witness, status, assurance, completeness, and open obligations; preserve
54+
artifact refs, including verification record URIs.
5855
5956
Keep representation, decomposition, composition, iteration, verification
60-
timing, and stopping decisions agent-owned. Treat timeouts, errors, incomplete
61-
searches, and missing witnesses as non-conclusions.
57+
timing, and stopping decisions agent-owned.
6258
6359
When independent checking is requested, model-authored calculations or programs
6460
are not independent evidence. Use installed `VERIFY` when available. An artifact
@@ -69,3 +65,9 @@ required task authorization and bindings are preserved; otherwise use lower
6965
task-permitted assurance. Verification is bound to the exact checked claim: do
7066
not transfer `VERIFIED` from an input, premise, factorization, or related
7167
artifact to a model-derived conclusion, which needs its own checker-bound record.
68+
For locally constructed inline input, check payload fields against the intended
69+
object. When output echoes scope or a bound digest/URI, compare it with the
70+
submitted input; do not use mismatched output. This catches routing and
71+
transcription mistakes but does not replace server validation or evidence
72+
binding. Account for each requested outcome in the final comparison. A
73+
`VERIFIED` sub-result does not verify another result or their comparison.

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
types: [opened, synchronize, reopened, edited, labeled, unlabeled]
99
merge_group:
1010
types: [checks_requested]
11+
workflow_dispatch:
1112

1213
concurrency:
1314
group: ci-${{ github.workflow }}-${{ github.ref }}

.github/workflows/release-please.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ jobs:
8383
git add uv.lock
8484
git commit -m "chore(release): synchronize uv lock"
8585
git push origin "HEAD:$RELEASE_BRANCH"
86+
- name: Dispatch release candidate CI
87+
if: steps.validated-head.outputs.current == 'true' && steps.release.outputs.prs_created == 'true'
88+
env:
89+
GH_TOKEN: ${{ github.token }}
90+
RELEASE_BRANCH: release-please--branches--main--components--jacobian
91+
run: >-
92+
gh workflow run ci.yml
93+
--repo "$GITHUB_REPOSITORY"
94+
--ref "$RELEASE_BRANCH"
8695
- name: Dispatch release publishing
8796
if: steps.release.outputs.release_created == 'true'
8897
env:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# cycle-double-cover-multiplicity-audit
2+
3+
An Assurance benchmark derived from retained conjecture row C-049. It tests whether an agent detects the difference between set-union edge coverage and exact multiplicity-two coverage, then constructs a genuine cycle double cover of the Petersen graph.
4+
5+
The clean-room verifier parses arbitrary simple cycles, canonicalizes cyclic symmetry, and recomputes all fifteen edge multiplicities. The task resists label-only and tiny-witness shortcuts and accepts non-oracle cycle systems. Provisional difficulty is Hard because it combines adversarial contract diagnosis with a constrained cycle-system construction; calibration is pending.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM python:3.12-slim@sha256:57cd7c3a7a273101a6485ba99423ee568157882804b1124b4dd04266317710de
2+
COPY input.json submission_schema.json /app/
3+
WORKDIR /app
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"task_id":"jacobian/cycle-double-cover-multiplicity-audit","graph":{"vertices":[0,1,2,3,4,5,6,7,8,9],"edges":[[0,1],[1,2],[2,3],[3,4],[0,4],[5,7],[7,9],[6,9],[6,8],[5,8],[0,5],[1,6],[2,7],[3,8],[4,9]]},"flawed_contract":{"checks":"every edge occurs in at least one submitted simple cycle","omits":"every edge occurs exactly twice with multiplicity"},"source":{"inventory_id":"C-049","name":"Cycle Double Cover Conjecture","scope":"one Petersen graph verifier audit"}}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
{
2+
"$defs": {
3+
"counts": {
4+
"items": {
5+
"maximum": 12,
6+
"minimum": 0,
7+
"type": "integer"
8+
},
9+
"maxItems": 15,
10+
"minItems": 15,
11+
"type": "array"
12+
},
13+
"cycle": {
14+
"items": {
15+
"maximum": 9,
16+
"minimum": 0,
17+
"type": "integer"
18+
},
19+
"maxItems": 9,
20+
"minItems": 5,
21+
"type": "array",
22+
"uniqueItems": true
23+
},
24+
"cycles": {
25+
"items": {
26+
"$ref": "#/$defs/cycle"
27+
},
28+
"maxItems": 12,
29+
"minItems": 4,
30+
"type": "array"
31+
}
32+
},
33+
"$schema": "https://json-schema.org/draft/2020-12/schema",
34+
"additionalProperties": false,
35+
"properties": {
36+
"claimed_assurance": {
37+
"enum": [
38+
"UNVERIFIED",
39+
"COMPUTED",
40+
"CHECKED",
41+
"VERIFIED"
42+
]
43+
},
44+
"completeness": {
45+
"const": "COMPLETE"
46+
},
47+
"conclusion": {
48+
"const": "UNION_COVERAGE_IS_INSUFFICIENT_AND_REPAIRED"
49+
},
50+
"evidence": {
51+
"items": {
52+
"additionalProperties": false,
53+
"properties": {
54+
"path": {
55+
"const": "evidence/answer.json"
56+
},
57+
"sha256": {
58+
"pattern": "^sha256:[0-9a-f]{64}$",
59+
"type": "string"
60+
}
61+
},
62+
"required": [
63+
"path",
64+
"sha256"
65+
],
66+
"type": "object"
67+
},
68+
"maxItems": 1,
69+
"minItems": 1,
70+
"type": "array"
71+
},
72+
"limitations": {
73+
"const": [
74+
"ONE_PETERSEN_GRAPH_INSTANCE",
75+
"MULTIPLICITY_CONTRACT_AUDIT_ONLY",
76+
"CYCLE_DOUBLE_COVER_CONJECTURE_NOT_ASSESSED"
77+
]
78+
},
79+
"result": {
80+
"additionalProperties": false,
81+
"properties": {
82+
"flawed_cycles": {
83+
"$ref": "#/$defs/cycles"
84+
},
85+
"flawed_multiplicities": {
86+
"$ref": "#/$defs/counts"
87+
},
88+
"non_double_edge_indices": {
89+
"items": {
90+
"maximum": 14,
91+
"minimum": 0,
92+
"type": "integer"
93+
},
94+
"minItems": 1,
95+
"type": "array",
96+
"uniqueItems": true
97+
},
98+
"repair_cycles": {
99+
"$ref": "#/$defs/cycles"
100+
},
101+
"repair_multiplicities": {
102+
"$ref": "#/$defs/counts"
103+
}
104+
},
105+
"required": [
106+
"flawed_cycles",
107+
"flawed_multiplicities",
108+
"non_double_edge_indices",
109+
"repair_cycles",
110+
"repair_multiplicities"
111+
],
112+
"type": "object"
113+
},
114+
"scope": {
115+
"const": "petersen-cycle-double-cover-audit-v1",
116+
"type": "string"
117+
},
118+
"task_id": {
119+
"const": "jacobian/cycle-double-cover-multiplicity-audit"
120+
}
121+
},
122+
"required": [
123+
"task_id",
124+
"conclusion",
125+
"result",
126+
"claimed_assurance",
127+
"scope",
128+
"completeness",
129+
"evidence",
130+
"limitations"
131+
],
132+
"type": "object"
133+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Cycle-double-cover multiplicity audit
2+
3+
The frozen validator accepts any collection of simple cycles whose union covers every edge. This is not the cycle-double-cover contract, which requires every edge to occur exactly twice **counting cycle multiplicity**.
4+
5+
For the supplied Petersen graph, submit a complete certificate containing:
6+
7+
1. a flawed-pass collection of at least four distinct simple cycles that covers every edge but is not a double cover;
8+
2. its complete 15-entry edge-multiplicity vector and the exact sorted indices whose multiplicity is not two; and
9+
3. a repaired collection of distinct simple cycles whose complete multiplicity vector is exactly two on every edge.
10+
11+
Each cycle is a vertex list without a repeated closing vertex. The verifier canonicalizes rotations and reversals, checks simplicity and every consecutive graph edge, rejects duplicate cycles, and recomputes both multiplicity profiles. Alternative valid collections are accepted.
12+
13+
This is one finite Assurance audit. It does not establish the Cycle Double Cover Conjecture for any graph family. Claim at most `CHECKED`.
14+
15+
<!-- BEGIN PUBLIC CONTRACT SUBMISSION BLOCK -->
16+
## Submission
17+
18+
Exact multiplicity audit and repair for one Petersen-graph cycle system only.
19+
20+
The evidence file must be a JSON object with exactly four fields: `schema_version` must be `"1"`, `task_id` must equal the submission task ID, `result` must be an exact JSON copy of `submission.json`'s result object, and `limitations` must be an exact JSON copy of its limitations list.
21+
22+
Write `/app/submission.json` to the exact schema in `environment/submission_schema.json`. The submission envelope requires `task_id`, `conclusion`, `result`, `claimed_assurance`, `scope`, `completeness`, `evidence`, and `limitations`.
23+
24+
- **Conclusion:** exactly `UNION_COVERAGE_IS_INSUFFICIENT_AND_REPAIRED`
25+
- **Assurance:** scoreable values are `UNVERIFIED`, `COMPUTED`, `CHECKED` (ceiling `CHECKED`); the submission schema accepts any of `UNVERIFIED`, `COMPUTED`, `CHECKED`, `VERIFIED` but only scoreable assurances receive credit.
26+
- **Scope:** the exact value declared in `submission_schema.json`
27+
- **Completeness:** `COMPLETE`.
28+
- **Evidence:** 1-1 item(s); allowed path(s): `evidence/answer.json`; digest must match `^sha256:[0-9a-f]{64}$`.
29+
- **Evidence media types:** `application/json`.
30+
- **Required artifact filenames:** `evidence/answer.json`.
31+
<!-- END PUBLIC CONTRACT SUBMISSION BLOCK -->
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
from __future__ import annotations
2+
3+
import hashlib
4+
import json
5+
from pathlib import Path
6+
7+
TASK_ID = "jacobian/cycle-double-cover-multiplicity-audit"
8+
EDGES = [
9+
(0, 1),
10+
(1, 2),
11+
(2, 3),
12+
(3, 4),
13+
(0, 4),
14+
(5, 7),
15+
(7, 9),
16+
(6, 9),
17+
(6, 8),
18+
(5, 8),
19+
(0, 5),
20+
(1, 6),
21+
(2, 7),
22+
(3, 8),
23+
(4, 9),
24+
]
25+
LIMITATIONS = [
26+
"ONE_PETERSEN_GRAPH_INSTANCE",
27+
"MULTIPLICITY_CONTRACT_AUDIT_ONLY",
28+
"CYCLE_DOUBLE_COVER_CONJECTURE_NOT_ASSESSED",
29+
]
30+
CYCLES = [
31+
[0, 1, 2, 3, 4],
32+
[0, 1, 6, 8, 5],
33+
[1, 2, 7, 9, 6],
34+
[2, 3, 8, 5, 7],
35+
[3, 4, 9, 6, 8],
36+
[0, 4, 9, 7, 5],
37+
]
38+
39+
40+
def multiplicities(cycles: list[list[int]]) -> list[int]:
41+
edge_index = {tuple(sorted(edge)): i for i, edge in enumerate(EDGES)}
42+
counts = [0] * len(EDGES)
43+
for cycle in cycles:
44+
for i, left in enumerate(cycle):
45+
counts[edge_index[tuple(sorted((left, cycle[(i + 1) % len(cycle)])))]] += 1
46+
return counts
47+
48+
49+
def main() -> None:
50+
root = Path("/app")
51+
flawed = CYCLES[:-1]
52+
flawed_counts = multiplicities(flawed)
53+
result = {
54+
"flawed_cycles": flawed,
55+
"flawed_multiplicities": flawed_counts,
56+
"non_double_edge_indices": [
57+
i for i, count in enumerate(flawed_counts) if count != 2
58+
],
59+
"repair_cycles": CYCLES,
60+
"repair_multiplicities": multiplicities(CYCLES),
61+
}
62+
payload = {
63+
"schema_version": "1",
64+
"task_id": TASK_ID,
65+
"result": result,
66+
"limitations": LIMITATIONS,
67+
}
68+
evidence = root / "evidence/answer.json"
69+
evidence.parent.mkdir(parents=True, exist_ok=True)
70+
evidence.write_text(
71+
json.dumps(payload, sort_keys=True, separators=(",", ":")) + "\n"
72+
)
73+
submission = {
74+
"task_id": TASK_ID,
75+
"conclusion": "UNION_COVERAGE_IS_INSUFFICIENT_AND_REPAIRED",
76+
"result": result,
77+
"claimed_assurance": "CHECKED",
78+
"scope": "petersen-cycle-double-cover-audit-v1",
79+
"completeness": "COMPLETE",
80+
"evidence": [
81+
{
82+
"path": "evidence/answer.json",
83+
"sha256": "sha256:" + hashlib.sha256(evidence.read_bytes()).hexdigest(),
84+
}
85+
],
86+
"limitations": LIMITATIONS,
87+
}
88+
(root / "submission.json").write_text(json.dumps(submission, sort_keys=True) + "\n")
89+
90+
91+
if __name__ == "__main__":
92+
main()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/sh
2+
set -eu
3+
python /solution/solve.py

0 commit comments

Comments
 (0)