runledger-cli 0.2.0__tar.gz → 0.2.2__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.
- {runledger_cli-0.2.0/runledger_cli.egg-info → runledger_cli-0.2.2}/PKG-INFO +2 -14
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/README.md +1 -13
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/ledger.py +11 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/pyproject.toml +1 -1
- {runledger_cli-0.2.0 → runledger_cli-0.2.2/runledger_cli.egg-info}/PKG-INFO +2 -14
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/LICENSE +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/__init__.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/docker-compose.yml +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/guided.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/__init__.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/conftest.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/test_data_features.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/test_integration.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/test_ledger.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/cli/tests/test_real_results.py +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/runledger_cli.egg-info/SOURCES.txt +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/runledger_cli.egg-info/dependency_links.txt +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/runledger_cli.egg-info/entry_points.txt +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/runledger_cli.egg-info/requires.txt +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/runledger_cli.egg-info/top_level.txt +0 -0
- {runledger_cli-0.2.0 → runledger_cli-0.2.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: runledger-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Self-hosted SQL-style query engine over your team's experiment JSON
|
|
5
5
|
Author: Ahmed Rafat
|
|
6
6
|
License: MIT
|
|
@@ -208,19 +208,7 @@ Demo users from `demo/seed.sql`:
|
|
|
208
208
|
| `bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb` | researcher | Team B |
|
|
209
209
|
| `cccccccc-cccc-cccc-cccc-cccccccccccc` | supervisor | assigned to both teams |
|
|
210
210
|
|
|
211
|
-
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## What this doesn't claim yet
|
|
216
|
-
|
|
217
|
-
- **Not tamper-evident.** The change-detection check catches a payload modified while its stored fingerprint was left unchanged. It does **not** detect a privileged database actor who rewrites both consistently. Closing that gap requires a hash chain, an independent verifier, and an external anchor. Not built.
|
|
218
|
-
- **Not authenticated.** The browser login is a development stub; the API trusts an `X-User-Id` header. Neither substitutes for real authentication in a deployed system. See [Development identity](#development-identity).
|
|
219
|
-
- **Not RLS on everything.** Row-Level Security is enabled for `run`, `batch_schema`, and `saved_search`. The identity and team tables (`teams`, `app_users`, `supervisor_team_assignments`) are not RLS-protected — they hold shared configuration and identity data, and access to them is controlled at the application layer.
|
|
220
|
-
- **Not a SQL console.** The query interface accepts RunLedger commands (`--metric`, `--op`, `--value`, `--combine`), not arbitrary SQL statements. PostgreSQL is the engine; the query surface is purpose-built.
|
|
221
|
-
- **Not multi-tenant.** One deployment serves one organization. There is no cross-organization tenancy, no per-org isolation above the team level, and no managed cloud offering.
|
|
222
|
-
|
|
223
|
-
Naming these limits is more useful than rounding up. Each constraint is documented in code and covered by tests, so the scope is visible and changeable.
|
|
211
|
+
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
224
212
|
|
|
225
213
|
---
|
|
226
214
|
|
|
@@ -180,19 +180,7 @@ Demo users from `demo/seed.sql`:
|
|
|
180
180
|
| `bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb` | researcher | Team B |
|
|
181
181
|
| `cccccccc-cccc-cccc-cccc-cccccccccccc` | supervisor | assigned to both teams |
|
|
182
182
|
|
|
183
|
-
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## What this doesn't claim yet
|
|
188
|
-
|
|
189
|
-
- **Not tamper-evident.** The change-detection check catches a payload modified while its stored fingerprint was left unchanged. It does **not** detect a privileged database actor who rewrites both consistently. Closing that gap requires a hash chain, an independent verifier, and an external anchor. Not built.
|
|
190
|
-
- **Not authenticated.** The browser login is a development stub; the API trusts an `X-User-Id` header. Neither substitutes for real authentication in a deployed system. See [Development identity](#development-identity).
|
|
191
|
-
- **Not RLS on everything.** Row-Level Security is enabled for `run`, `batch_schema`, and `saved_search`. The identity and team tables (`teams`, `app_users`, `supervisor_team_assignments`) are not RLS-protected — they hold shared configuration and identity data, and access to them is controlled at the application layer.
|
|
192
|
-
- **Not a SQL console.** The query interface accepts RunLedger commands (`--metric`, `--op`, `--value`, `--combine`), not arbitrary SQL statements. PostgreSQL is the engine; the query surface is purpose-built.
|
|
193
|
-
- **Not multi-tenant.** One deployment serves one organization. There is no cross-organization tenancy, no per-org isolation above the team level, and no managed cloud offering.
|
|
194
|
-
|
|
195
|
-
Naming these limits is more useful than rounding up. Each constraint is documented in code and covered by tests, so the scope is visible and changeable.
|
|
183
|
+
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
196
184
|
|
|
197
185
|
---
|
|
198
186
|
|
|
@@ -1148,6 +1148,17 @@ def cli_aggregate(args):
|
|
|
1148
1148
|
# ------------------------------------------------------------
|
|
1149
1149
|
def main():
|
|
1150
1150
|
parser = argparse.ArgumentParser(description="RunLedger CLI")
|
|
1151
|
+
try:
|
|
1152
|
+
from importlib.metadata import version as _pkg_version
|
|
1153
|
+
_ver = _pkg_version("runledger-cli")
|
|
1154
|
+
except Exception:
|
|
1155
|
+
_ver = "unknown"
|
|
1156
|
+
|
|
1157
|
+
parser.add_argument(
|
|
1158
|
+
"--version",
|
|
1159
|
+
action="version",
|
|
1160
|
+
version=f"runledger {_ver}",
|
|
1161
|
+
)
|
|
1151
1162
|
subparsers = parser.add_subparsers(dest="command", help="Command")
|
|
1152
1163
|
|
|
1153
1164
|
# scan
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: runledger-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Self-hosted SQL-style query engine over your team's experiment JSON
|
|
5
5
|
Author: Ahmed Rafat
|
|
6
6
|
License: MIT
|
|
@@ -208,19 +208,7 @@ Demo users from `demo/seed.sql`:
|
|
|
208
208
|
| `bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb` | researcher | Team B |
|
|
209
209
|
| `cccccccc-cccc-cccc-cccc-cccccccccccc` | supervisor | assigned to both teams |
|
|
210
210
|
|
|
211
|
-
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## What this doesn't claim yet
|
|
216
|
-
|
|
217
|
-
- **Not tamper-evident.** The change-detection check catches a payload modified while its stored fingerprint was left unchanged. It does **not** detect a privileged database actor who rewrites both consistently. Closing that gap requires a hash chain, an independent verifier, and an external anchor. Not built.
|
|
218
|
-
- **Not authenticated.** The browser login is a development stub; the API trusts an `X-User-Id` header. Neither substitutes for real authentication in a deployed system. See [Development identity](#development-identity).
|
|
219
|
-
- **Not RLS on everything.** Row-Level Security is enabled for `run`, `batch_schema`, and `saved_search`. The identity and team tables (`teams`, `app_users`, `supervisor_team_assignments`) are not RLS-protected — they hold shared configuration and identity data, and access to them is controlled at the application layer.
|
|
220
|
-
- **Not a SQL console.** The query interface accepts RunLedger commands (`--metric`, `--op`, `--value`, `--combine`), not arbitrary SQL statements. PostgreSQL is the engine; the query surface is purpose-built.
|
|
221
|
-
- **Not multi-tenant.** One deployment serves one organization. There is no cross-organization tenancy, no per-org isolation above the team level, and no managed cloud offering.
|
|
222
|
-
|
|
223
|
-
Naming these limits is more useful than rounding up. Each constraint is documented in code and covered by tests, so the scope is visible and changeable.
|
|
211
|
+
Visit `http://localhost:8080/login` and paste an ID. For API access, pass the same ID in an `X-User-Id` header. Role and team are looked up server-side — the client cannot declare which team it belongs to, but it *can* declare which user it is, which is exactly why this stub isn't authentication
|
|
224
212
|
|
|
225
213
|
---
|
|
226
214
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|