mostlyright-data 0.20.1__tar.gz → 0.20.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.
Files changed (72) hide show
  1. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/PKG-INFO +1 -1
  2. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/pyproject.toml +1 -1
  3. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/commands/auth.py +38 -4
  4. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/.gitignore +0 -0
  5. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/README.md +0 -0
  6. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/scripts/hatch_build.py +0 -0
  7. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/skills/mr-data-build/SKILL.md +0 -0
  8. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/skills/mr-data-build/agents/openai.yaml +0 -0
  9. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  10. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/__init__.py +0 -0
  11. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/canonical.py +0 -0
  12. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/formats.py +0 -0
  13. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  14. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/key_seam.py +0 -0
  15. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/page_coverage.py +0 -0
  16. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  17. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/session_probes.py +0 -0
  18. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
  19. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
  20. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  21. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  22. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  23. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
  24. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  25. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/categories.py +0 -0
  26. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
  27. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +0 -0
  28. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/download.py +0 -0
  29. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  30. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
  31. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
  32. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/progress_vocabulary.py +0 -0
  33. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
  34. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  35. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/research.py +0 -0
  36. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/router.py +0 -0
  37. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
  38. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/session.py +0 -0
  39. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
  40. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  41. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
  42. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
  43. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
  44. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  45. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
  46. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  47. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  48. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  49. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  50. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  51. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  52. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  53. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  54. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  55. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  56. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  57. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  58. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  59. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  60. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  61. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  62. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  63. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  64. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  65. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  66. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  67. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  68. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/login.py +0 -0
  69. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  70. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  71. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  72. {mostlyright_data-0.20.1 → mostlyright_data-0.20.2}/src/mostlyright/data_harness/ux/render.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.20.1
3
+ Version: 0.20.2
4
4
  Summary: Mostly Right hosted CLI for reviewed datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.20.1"
3
+ version = "0.20.2"
4
4
  description = "Mostly Right hosted CLI for reviewed datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -509,6 +509,19 @@ def recover_payload(
509
509
  with credential_lock(store.config_dir):
510
510
  envelope = store.load_under_held_lock()
511
511
  if envelope is None:
512
+ if local_only:
513
+ # Resume a crash after deleting an empty pending store but before
514
+ # removing its selector. Never claim remote cleanup from local absence.
515
+ remove_credential_manifest_under_held_lock(path)
516
+ return _with_environment_authority(
517
+ {
518
+ "schema_version": _RECOVERY_SCHEMA,
519
+ "status": "local_recovery_completed",
520
+ "remote_revocation": "unproved",
521
+ "local_state": "removed",
522
+ "mint_outcome": "unproved",
523
+ }
524
+ )
512
525
  return _mutation_error(
513
526
  _RECOVERY_SCHEMA,
514
527
  status="refused",
@@ -534,16 +547,37 @@ def recover_payload(
534
547
  )
535
548
  if envelope.state == "login_pending":
536
549
  if not local_only:
537
- return _mutation_error(
538
- _RECOVERY_SCHEMA, status="refused", local_state="pending"
550
+ return {
551
+ **_mutation_error(
552
+ _RECOVERY_SCHEMA, status="refused", local_state="pending"
553
+ ),
554
+ "next_action": "Finish or stop the previous sign-in. If it has stopped, "
555
+ "run mr-data auth recover --local-only, then retry logout or login. "
556
+ "Local recovery does not prove remote revocation.",
557
+ }
558
+ # The outer lock already owns this generation. Calling the standalone
559
+ # recovery helper here would try to acquire the same non-reentrant lock.
560
+ if envelope.active is None:
561
+ # Keep the selector retryable if the native delete refuses access.
562
+ store.delete_under_held_lock(
563
+ expected_generation=envelope.generation,
564
+ expected_states=frozenset({"login_pending"}),
565
+ )
566
+ remove_credential_manifest_under_held_lock(path)
567
+ else:
568
+ store.replace_under_held_lock(
569
+ CredentialEnvelope.active_envelope(
570
+ generation=envelope.generation + 1, active=envelope.active
571
+ ),
572
+ expected_generation=envelope.generation,
573
+ expected_states=frozenset({"login_pending"}),
539
574
  )
540
- store.recover_login_lease_local_only()
541
575
  return _with_environment_authority(
542
576
  {
543
577
  "schema_version": _RECOVERY_SCHEMA,
544
578
  "status": "local_recovery_completed",
545
579
  "remote_revocation": "unproved",
546
- "local_state": "recovered",
580
+ "local_state": "active" if envelope.active is not None else "removed",
547
581
  "mint_outcome": "unproved",
548
582
  }
549
583
  )