sediment-cli 0.6.1__tar.gz → 0.7.0__tar.gz

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 (93) hide show
  1. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/PKG-INFO +5 -5
  2. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/pyproject.toml +5 -5
  3. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/README.md +1 -1
  4. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/package.json +1 -1
  5. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/agent_guide.txt +4 -3
  6. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/attribution.py +20 -2
  7. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/cli.py +4 -0
  8. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/quarantine.txt +2 -2
  9. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/release.txt +2 -2
  10. sediment_cli-0.7.0/tests/testdata/help/report-compute.txt +14 -0
  11. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report.txt +1 -0
  12. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/sediment.txt +1 -1
  13. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/.gitignore +0 -0
  14. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/LICENSE +0 -0
  15. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/README.md +0 -0
  16. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/hatch_build.py +0 -0
  17. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/__init__.py +0 -0
  18. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/LICENSE +0 -0
  19. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/index.ts +0 -0
  20. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/lib/contract.ts +0 -0
  21. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/lib/process.ts +0 -0
  22. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/lib/provider.ts +0 -0
  23. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/lib/register.ts +0 -0
  24. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/_pi/lib/retrieval.ts +0 -0
  25. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/client.py +0 -0
  26. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/delivery.py +0 -0
  27. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/evidence.py +0 -0
  28. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/local_postgres.py +0 -0
  29. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/transcript.py +0 -0
  30. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/sediment_cli/ui.py +0 -0
  31. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/conftest.py +0 -0
  32. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_agent_guide.py +0 -0
  33. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli.py +0 -0
  34. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_capture_authority.py +0 -0
  35. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_db.py +0 -0
  36. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_evidence.py +0 -0
  37. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_evidence_integration.py +0 -0
  38. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_help.py +0 -0
  39. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_libpq_unavailable.py +0 -0
  40. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_remote.py +0 -0
  41. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_cli_ui.py +0 -0
  42. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_consumer_profile_cli.py +0 -0
  43. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_delivery_transport.py +0 -0
  44. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_demo_verb.py +0 -0
  45. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_e2e_quickstart.py +0 -0
  46. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_installed_wheel.py +0 -0
  47. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_local_postgres.py +0 -0
  48. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/test_server_migration.py +0 -0
  49. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/commit.txt +0 -0
  50. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/db-check.txt +0 -0
  51. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/db-provision.txt +0 -0
  52. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/db-status.txt +0 -0
  53. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/db-upgrade.txt +0 -0
  54. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/db.txt +0 -0
  55. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/delivery-enqueue.txt +0 -0
  56. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/delivery-replay.txt +0 -0
  57. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/delivery-status.txt +0 -0
  58. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/delivery.txt +0 -0
  59. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/demo.txt +0 -0
  60. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/derive.txt +0 -0
  61. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/doctor.txt +0 -0
  62. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/evidence-fetch.txt +0 -0
  63. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/evidence-inspect.txt +0 -0
  64. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/evidence-inventory.txt +0 -0
  65. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/evidence.txt +0 -0
  66. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export-diff-sft.txt +0 -0
  67. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export-dpo.txt +0 -0
  68. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export-recovery.txt +0 -0
  69. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export-rlvr.txt +0 -0
  70. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export-sft.txt +0 -0
  71. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/export.txt +0 -0
  72. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/facts.txt +0 -0
  73. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/guide.txt +0 -0
  74. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/install.txt +0 -0
  75. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/login.txt +0 -0
  76. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/logout.txt +0 -0
  77. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/mirror-gc.txt +0 -0
  78. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/quarantine-inference-calls.txt +0 -0
  79. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/quarantine-log.txt +0 -0
  80. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/repair-notes.txt +0 -0
  81. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-abandonment.txt +0 -0
  82. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-attribution-share.txt +0 -0
  83. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-dataset-diagnostics.txt +0 -0
  84. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-label-confidence-inspection.txt +0 -0
  85. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-lifecycle.txt +0 -0
  86. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-merge-retention.txt +0 -0
  87. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-model.txt +0 -0
  88. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-precision.txt +0 -0
  89. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/report-recovery-yield.txt +0 -0
  90. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/server.txt +0 -0
  91. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/stamp.txt +0 -0
  92. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/transcript.txt +0 -0
  93. {sediment_cli-0.6.1 → sediment_cli-0.7.0}/tests/testdata/help/uninstall.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sediment-cli
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: A self-hosted evidence store for coding agents: the sediment CLI and local server
5
5
  Project-URL: Source, https://github.com/sediment-ai/sediment
6
6
  Project-URL: Documentation, https://docs.sediment.so
@@ -10,10 +10,10 @@ License-Expression: AGPL-3.0-or-later
10
10
  License-File: LICENSE
11
11
  Requires-Python: >=3.12
12
12
  Requires-Dist: httpx>=0.27
13
- Requires-Dist: sediment-api==0.6.1
14
- Requires-Dist: sediment-core==0.6.1
15
- Requires-Dist: sediment-derive==0.6.1
16
- Requires-Dist: sediment-export==0.6.1
13
+ Requires-Dist: sediment-api==0.7.0
14
+ Requires-Dist: sediment-core==0.7.0
15
+ Requires-Dist: sediment-derive==0.7.0
16
+ Requires-Dist: sediment-export==0.7.0
17
17
  Description-Content-Type: text/markdown
18
18
 
19
19
  # sediment-cli
@@ -5,7 +5,7 @@
5
5
  # Depends on sediment-api deliberately: the operator verbs are DB-local by
6
6
  # design (ADR 0001) and `server`/reports/mirror-gc forward into it.
7
7
  name = "sediment-cli"
8
- version = "0.6.1"
8
+ version = "0.7.0"
9
9
  description = "A self-hosted evidence store for coding agents: the sediment CLI and local server"
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.12"
@@ -15,10 +15,10 @@ license-files = ["LICENSE"]
15
15
  # so an install never mixes member versions (the release workflow asserts
16
16
  # the versions agree before publishing).
17
17
  dependencies = [
18
- "sediment-core==0.6.1",
19
- "sediment-derive==0.6.1",
20
- "sediment-export==0.6.1",
21
- "sediment-api==0.6.1",
18
+ "sediment-core==0.7.0",
19
+ "sediment-derive==0.7.0",
20
+ "sediment-export==0.7.0",
21
+ "sediment-api==0.7.0",
22
22
  "httpx>=0.27",
23
23
  ]
24
24
 
@@ -195,7 +195,7 @@ delivery changes also trigger this workflow. To exercise the same tests locally,
195
195
  set `SEDIMENT_PI_TEST_PYTHON` to the installed environment's Python executable
196
196
  and `SEDIMENT_PI_TEST_INSTALLED_BIN` to its `bin` directory before `npm test`.
197
197
 
198
- The lockfile pins pi 1.1.0 (`@earendil-works/pi-coding-agent`) as a development
198
+ The lockfile pins pi 1.5.0 (`@earendil-works/pi-coding-agent`) as a development
199
199
  dependency. The native retrieval test exercises its extension registration,
200
200
  argument validation, agent loop, and model-visible tool result with a scripted
201
201
  model stream. It makes no paid inference request and downloads no package during
@@ -13,7 +13,7 @@
13
13
  "typecheck": "tsc --noEmit"
14
14
  },
15
15
  "devDependencies": {
16
- "@earendil-works/pi-coding-agent": "1.1.0",
16
+ "@earendil-works/pi-coding-agent": "1.5.0",
17
17
  "@types/node": "^24.19.2",
18
18
  "typescript": "^7.0.2"
19
19
  }
@@ -85,9 +85,10 @@ Session checks to verify delivery. `commit` requires an operator credential;
85
85
  - Preserve the `sediment env` blocks in shell profiles and Sediment's entries
86
86
  in Claude Code settings, Codex hooks and profiles, Cursor hooks, and pi
87
87
  settings. User-level agent hooks apply across repositories.
88
- - Read hook output. Sediment commands end in `|| true`; an appended block can
89
- also mask a repository check that relies on its last command's exit status.
90
- A zero status alone doesn't prove that the repository's checks passed.
88
+ - Read hook output. Sediment commands end in `|| true`, so they never fail a
89
+ commit or push. The marked block keeps the hook's previous exit status.
90
+ Commands after the block still run. A zero status alone doesn't prove that
91
+ capture succeeded.
91
92
 
92
93
  [What the installer changes](../capture/local-capture.md#what-the-installer-changes)
93
94
  describes the hooks. [Roll out managed capture](../capture/managed-capture.md)
@@ -152,7 +152,9 @@ _HOOK_BLOCK_RE = re.compile(
152
152
  # disagree about which hooks exist.
153
153
  _REPO_HOOKS = (
154
154
  ("post-commit", "stamp"),
155
- ("prepare-commit-msg", 'union-squash-notes "$1" "$2"'),
155
+ # A plain `git commit` passes one argument. `${2-}` is empty when git
156
+ # omits the commit source, so `set -u` doesn't abort before `|| true`.
157
+ ("prepare-commit-msg", 'union-squash-notes "$1" "${2-}"'),
156
158
  ("pre-push", 'push-notes "$1"'),
157
159
  )
158
160
  # Substrings used to recognise our entries in agent hook configs. The
@@ -2257,8 +2259,24 @@ def _install_hook_block(hook_file: Path, command: str) -> bool:
2257
2259
  Refuses (returns False) when the existing hook is not an sh script —
2258
2260
  appending sh to a python/binary hook would break every commit/push, the
2259
2261
  one thing the stamper must never do.
2262
+
2263
+ The block saves the status it found and restores it after ``command``.
2264
+ ``command`` ends in ``|| true``, so a Sediment failure cannot fail the
2265
+ commit or push. The restore runs in a subshell: later hook commands still
2266
+ run, and ``set -e`` doesn't treat the restored status as a block failure.
2260
2267
  """
2261
- block = f"{HOOK_BLOCK_BEGIN}\n{command}\n{HOOK_BLOCK_END}\n"
2268
+ # The subshell restores the previous command's status without exiting the
2269
+ # hook or leaking `__sediment_status`. `&& :` keeps that restored status
2270
+ # from tripping `set -e` before later commands.
2271
+ block = (
2272
+ f"{HOOK_BLOCK_BEGIN}\n"
2273
+ "(\n"
2274
+ " __sediment_status=$?\n"
2275
+ f" {command}\n"
2276
+ ' exit "$__sediment_status"\n'
2277
+ ") && :\n"
2278
+ f"{HOOK_BLOCK_END}\n"
2279
+ )
2262
2280
  if hook_file.exists():
2263
2281
  try:
2264
2282
  content = hook_file.read_text(encoding="utf-8")
@@ -132,6 +132,10 @@ _REPORTS = {
132
132
  "sediment_api.reports.merge_retention_report",
133
133
  "attributed change retention through pull request merge",
134
134
  ),
135
+ "compute": (
136
+ "sediment_api.reports.compute_report",
137
+ "Session completion time by final Compute allocation",
138
+ ),
135
139
  "lifecycle": (
136
140
  "sediment_api.reports.lifecycle_report",
137
141
  "accepted-work progression, retention, attrition, and rework evidence",
@@ -1,12 +1,12 @@
1
1
  USAGE:
2
2
  sediment quarantine [-h] --reason REASON
3
- {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames}
3
+ {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames,compute_allocations}
4
4
  fact_id
5
5
 
6
6
  quarantine one fact by id
7
7
 
8
8
  ARGUMENTS:
9
- {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames}
9
+ {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames,compute_allocations}
10
10
  fact_id
11
11
 
12
12
  OPTIONS:
@@ -1,12 +1,12 @@
1
1
  USAGE:
2
2
  sediment release [-h] --reason REASON
3
- {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames}
3
+ {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames,compute_allocations}
4
4
  fact_id
5
5
 
6
6
  release one quarantined fact by id
7
7
 
8
8
  ARGUMENTS:
9
- {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames}
9
+ {inference_calls,developer_decisions,ci_outcomes,pushes,pull_request_merges,pull_request_revisions,edit_observations,rejected_edits,retry_linkages,session_commit_observations,repository_renames,compute_allocations}
10
10
  fact_id
11
11
 
12
12
  OPTIONS:
@@ -0,0 +1,14 @@
1
+ USAGE:
2
+ sediment report compute [-h] [--org ORG] [--json] [--rows-out FILE]
3
+ [--database-url DATABASE_URL]
4
+
5
+ Compare Session completion time across final Compute allocations.
6
+
7
+ OPTIONS:
8
+ -h, --help show this help message and exit
9
+ --org ORG org id (default: $SEDIMENT_ORG_ID)
10
+ --json emit JSON instead of a text report
11
+ --rows-out FILE write one Session compute timing per line to FILE as
12
+ JSONL
13
+ --database-url DATABASE_URL
14
+ PostgreSQL URL (default: $SEDIMENT_DATABASE_URL)
@@ -12,4 +12,5 @@ REPORTS:
12
12
  abandonment sessions whose accepted edits never reached a commit
13
13
  attribution-share notes-attribution share and decline alert
14
14
  merge-retention attributed change retention through pull request merge
15
+ compute Session completion time by final Compute allocation
15
16
  lifecycle accepted-work progression, retention, attrition, and rework evidence
@@ -1,4 +1,4 @@
1
- sediment v0.6.1 — A self-hosted evidence store for coding agents.
1
+ sediment v0.7.0 — A self-hosted evidence store for coding agents.
2
2
 
3
3
  USAGE:
4
4
  sediment <command> [options]
File without changes
File without changes
File without changes