oldhand 0.6.0b1__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 (98) hide show
  1. oldhand-0.6.0b1/.gitignore +16 -0
  2. oldhand-0.6.0b1/CHANGELOG.md +114 -0
  3. oldhand-0.6.0b1/LICENSE +21 -0
  4. oldhand-0.6.0b1/PKG-INFO +587 -0
  5. oldhand-0.6.0b1/README.md +540 -0
  6. oldhand-0.6.0b1/benchmarks/synthetic/LICENSE.md +9 -0
  7. oldhand-0.6.0b1/benchmarks/synthetic/README.md +37 -0
  8. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/auth-cache-principal-scoped.md +33 -0
  9. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/billing-cutoff-is-utc.md +33 -0
  10. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/config-replaces-defaults.md +33 -0
  11. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/payment-webhook-idempotency.md +33 -0
  12. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/decisions/migrations-are-explicit.md +33 -0
  13. oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/lessons/feature-flag-retirement.md +33 -0
  14. oldhand-0.6.0b1/benchmarks/synthetic/queries.json +36 -0
  15. oldhand-0.6.0b1/benchmarks/synthetic/results.json +92 -0
  16. oldhand-0.6.0b1/docs/CLI_SPEC.md +628 -0
  17. oldhand-0.6.0b1/docs/LESSONS.md +182 -0
  18. oldhand-0.6.0b1/docs/METRICS.md +119 -0
  19. oldhand-0.6.0b1/docs/MIGRATING_AN_ARCHIVE.md +83 -0
  20. oldhand-0.6.0b1/docs/RECONCILING_AN_EXISTING_ARCHIVE.md +178 -0
  21. oldhand-0.6.0b1/docs/advanced-replay.md +179 -0
  22. oldhand-0.6.0b1/docs/audits/2026-09-18-pre-public-history-audit.md +48 -0
  23. oldhand-0.6.0b1/docs/audits/2026-09-19-pre-public-history-audit.md +64 -0
  24. oldhand-0.6.0b1/docs/brand-decision.md +134 -0
  25. oldhand-0.6.0b1/docs/charts.py +504 -0
  26. oldhand-0.6.0b1/docs/diagrams/agent-interface.drawio +33 -0
  27. oldhand-0.6.0b1/docs/diagrams/curation.drawio +60 -0
  28. oldhand-0.6.0b1/docs/diagrams/everyday-loop.drawio +33 -0
  29. oldhand-0.6.0b1/docs/diagrams/lifecycle.drawio +42 -0
  30. oldhand-0.6.0b1/docs/diagrams/replay-loop.drawio +36 -0
  31. oldhand-0.6.0b1/docs/evidence.md +90 -0
  32. oldhand-0.6.0b1/docs/evolution/ten-generations.md +184 -0
  33. oldhand-0.6.0b1/docs/img/architecture.svg +39 -0
  34. oldhand-0.6.0b1/docs/img/beforeafter.svg +45 -0
  35. oldhand-0.6.0b1/docs/img/budget.svg +53 -0
  36. oldhand-0.6.0b1/docs/img/cli-tour.svg +17 -0
  37. oldhand-0.6.0b1/docs/img/collections.svg +37 -0
  38. oldhand-0.6.0b1/docs/img/curation.svg +29 -0
  39. oldhand-0.6.0b1/docs/img/demo-session.svg +20 -0
  40. oldhand-0.6.0b1/docs/img/inflation.svg +37 -0
  41. oldhand-0.6.0b1/docs/img/lifecycle.svg +19 -0
  42. oldhand-0.6.0b1/docs/img/precision.svg +45 -0
  43. oldhand-0.6.0b1/docs/img/replay-loop.svg +40 -0
  44. oldhand-0.6.0b1/docs/img/stages.svg +29 -0
  45. oldhand-0.6.0b1/docs/img/workflow.svg +18 -0
  46. oldhand-0.6.0b1/docs/integrations-setup-research.md +123 -0
  47. oldhand-0.6.0b1/docs/internal/README.md +12 -0
  48. oldhand-0.6.0b1/docs/internal/plans/2026-09-17-five-iteration-improvements.md +100 -0
  49. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-discovery-replay-loop.md +96 -0
  50. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-open-source-launch-readiness.md +455 -0
  51. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-readme-with-soul.md +22 -0
  52. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-curation-improvements.md +108 -0
  53. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-generation-evolution.md +45 -0
  54. oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-lifecycle-improvements.md +117 -0
  55. oldhand-0.6.0b1/docs/internal/plans/five-iteration-improvements.md +17 -0
  56. oldhand-0.6.0b1/docs/internal/plans/ten-curation-improvements.md +9 -0
  57. oldhand-0.6.0b1/docs/internal/plans/ten-lifecycle-improvements.md +10 -0
  58. oldhand-0.6.0b1/docs/make_demo_svg.py +112 -0
  59. oldhand-0.6.0b1/examples/demo/README.md +52 -0
  60. oldhand-0.6.0b1/examples/demo/TRANSCRIPT.md +37 -0
  61. oldhand-0.6.0b1/examples/demo/oldhand-demo.tape +42 -0
  62. oldhand-0.6.0b1/examples/run_demo.py +97 -0
  63. oldhand-0.6.0b1/examples/sample-project/README.md +17 -0
  64. oldhand-0.6.0b1/examples/sample-project/SYNTHETIC_EXAMPLE.md +10 -0
  65. oldhand-0.6.0b1/examples/sample-project/config/defaults.json +5 -0
  66. oldhand-0.6.0b1/examples/sample-project/config/staging.json +3 -0
  67. oldhand-0.6.0b1/examples/sample-project/config_loader.py +18 -0
  68. oldhand-0.6.0b1/examples/sample-project/memory/constraints/environment-config-replaces-defaults.md +48 -0
  69. oldhand-0.6.0b1/memory/README.md +35 -0
  70. oldhand-0.6.0b1/pyproject.toml +54 -0
  71. oldhand-0.6.0b1/requirements.txt +1 -0
  72. oldhand-0.6.0b1/src/oldhand/__init__.py +10 -0
  73. oldhand-0.6.0b1/src/oldhand/analysis.py +825 -0
  74. oldhand-0.6.0b1/src/oldhand/authoring.py +36 -0
  75. oldhand-0.6.0b1/src/oldhand/cli.py +645 -0
  76. oldhand-0.6.0b1/src/oldhand/constants.py +172 -0
  77. oldhand-0.6.0b1/src/oldhand/experience.py +779 -0
  78. oldhand-0.6.0b1/src/oldhand/harness.py +716 -0
  79. oldhand-0.6.0b1/src/oldhand/indexing.py +448 -0
  80. oldhand-0.6.0b1/src/oldhand/records.py +82 -0
  81. oldhand-0.6.0b1/src/oldhand/schema.sql +92 -0
  82. oldhand-0.6.0b1/src/oldhand/search.py +1084 -0
  83. oldhand-0.6.0b1/src/oldhand/validation.py +131 -0
  84. oldhand-0.6.0b1/src/oldhand/workspace.py +150 -0
  85. oldhand-0.6.0b1/tests/test_cli.py +1422 -0
  86. oldhand-0.6.0b1/tests/test_e2e.py +475 -0
  87. oldhand-0.6.0b1/tests/test_install.py +382 -0
  88. oldhand-0.6.0b1/tests/test_migrations.py +366 -0
  89. oldhand-0.6.0b1/tests/test_run_demo.py +46 -0
  90. oldhand-0.6.0b1/tests/test_synthetic_benchmark.py +24 -0
  91. oldhand-0.6.0b1/tools/install.py +299 -0
  92. oldhand-0.6.0b1/tools/migrate/_overrides.py +78 -0
  93. oldhand-0.6.0b1/tools/migrate/from_claude_memory.py +305 -0
  94. oldhand-0.6.0b1/tools/migrate/from_markdown.py +268 -0
  95. oldhand-0.6.0b1/tools/migrate/from_repo_memory.py +459 -0
  96. oldhand-0.6.0b1/tools/migrate/resync.py +137 -0
  97. oldhand-0.6.0b1/tools/run_synthetic_benchmark.py +138 -0
  98. oldhand-0.6.0b1/tools/verify.py +74 -0
@@ -0,0 +1,16 @@
1
+ # Derived state. The index and the retrieval log are rebuilt from the
2
+ # canonical Markdown, so losing them loses nothing.
3
+ .oldhand/
4
+ .lore/
5
+ __pycache__/
6
+ *.pyc
7
+ .DS_Store
8
+
9
+ # Exported metrics bundles, if you write one into this directory.
10
+ #
11
+ # `metrics/daily.jsonl` is deliberately NOT ignored by this pattern. A
12
+ # measurement record is not derived state: the daily history is the only
13
+ # thing that can answer "did anything change, and when", and it cannot be
14
+ # reconstructed once it is gone.
15
+ metrics/*.json
16
+ dist/
@@ -0,0 +1,114 @@
1
+ # Changelog
2
+
3
+ All notable user-facing changes to Lore will be documented in this file.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
6
+ and Lore uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html) for
7
+ released versions.
8
+
9
+ ## [0.6.0b1] - 2026-09-19
10
+
11
+ First release under the name **Oldhand**, and the first installable one.
12
+
13
+ ### Changed - renamed from Lore
14
+
15
+ The project was called Lore. Every name that kept it collided on PyPI:
16
+ `lore` is an unrelated machine-learning framework, `lore-memory` is a direct
17
+ competitor with near-identical messaging, and `lore-cli` is another
18
+ developer tool. `pip install lore` could never have been offered, and
19
+ search would have sent users to a competitor.
20
+
21
+ - Distribution, console command and import package are all `oldhand`.
22
+ - `OLDHAND_ROOT` replaces `LORE_ROOT`. `LORE_ROOT` is still read, so existing
23
+ archives keep working; `OLDHAND_ROOT` wins when both are set.
24
+ - The index directory is now `.oldhand/` holding `oldhand.db`. It is derived
25
+ state: delete the old `.lore/` directory, and the next command rebuilds.
26
+ - Metrics snapshots and index metadata record `oldhand_version`. The former
27
+ `lore_version` key is still accepted, so metrics history recorded before
28
+ the rename is not retroactively treated as malformed.
29
+
30
+ ### Added
31
+
32
+ - Standard Python packaging. `pipx install oldhand` or `pip install oldhand`
33
+ replaces cloning the repository and running a script from inside it.
34
+ - A CI job that builds the wheel and sdist, installs the wheel into a clean
35
+ virtual environment, runs the console script, and publishes checksums.
36
+ - Community, security and contribution guidance for the public launch.
37
+ - An evidence guide separating field observations, controlled interventions
38
+ and synthetic regression results.
39
+ - A versioned, reproducible synthetic retrieval benchmark with a checked-in
40
+ baseline.
41
+ - `LORE_DEBUG`/`OLDHAND_DEBUG` surfaces metrics-recording failures that were
42
+ previously swallowed in silence.
43
+
44
+ ### Fixed
45
+
46
+ - The `path` field in JSON output was rendered with the platform separator,
47
+ so it came back with backslashes on Windows. It is now POSIX everywhere.
48
+ - Daily metrics were written from an `atexit` handler, which depended on
49
+ interpreter finalization and did not run reliably on Python 3.13. Recording
50
+ is now deterministic, under `try`/`finally`.
51
+ - `metrics --export` rejected any PEP 440 pre-release version string.
52
+
53
+ ### Project layout
54
+
55
+ The CLI moved from `tools/lore/lore.py` to `src/oldhand/cli.py`, and tests
56
+ moved to `tests/`. Behaviour is unchanged; 187 tests pass on Python
57
+ 3.10-3.13 on Linux and macOS.
58
+
59
+ ## [Unreleased]
60
+
61
+ ### Added
62
+
63
+ - Community, security, and contribution guidance for the public launch.
64
+ - An evidence guide that keeps field observations, controlled interventions,
65
+ and synthetic regression results separate.
66
+ - A versioned, reproducible synthetic retrieval benchmark and checked-in
67
+ baseline result artifact.
68
+
69
+ ### Changed
70
+
71
+ - Release documentation now distinguishes local archive evidence from
72
+ generalizable product claims.
73
+
74
+ ### Release checklist
75
+
76
+ Before cutting the next public release:
77
+
78
+ - [ ] Choose and document the canonical public package and project identity.
79
+ - [ ] Run the full test suite on supported Python versions and operating
80
+ systems in CI.
81
+ - [ ] Run `python -B tools/run_synthetic_benchmark.py --verify` and review any
82
+ baseline change in `benchmarks/synthetic/results.json`.
83
+ - [ ] Run the repository-history and example-data audit; resolve or explicitly
84
+ accept every finding before changing repository visibility.
85
+ - [ ] Verify package build artifacts in a clean environment and record their
86
+ checksums.
87
+ - [ ] Review this file, assign the release version/date, create an annotated
88
+ tag, and attach release notes plus package artifacts to the GitHub release.
89
+
90
+ ### Known limitations
91
+
92
+ - Published field measurements and controlled interventions currently come
93
+ from one archive; they are not independent validation.
94
+ - The synthetic benchmark is a deterministic regression fixture, not a
95
+ realistic adoption or retrieval-quality benchmark.
96
+ - Replay evaluates already-recorded discovery traces and never executes an
97
+ agent or predicts unseen outcomes.
98
+ - Windows is not supported. The release CI matrix now measures it on an
99
+ informational `windows-preview` job, which fails: `show --json` produces no
100
+ stdout under the end-to-end harness, and installer symlink handling is
101
+ unverified. Linux and macOS are verified on Python 3.10-3.13.
102
+ - Package-installation ergonomics must be verified from a clean environment
103
+ before being claimed as supported.
104
+ - Lore is local software, not an access-control, backup, secret-management, or
105
+ compliance system.
106
+
107
+ ## Historical releases
108
+
109
+ Historical tags predate this changelog. Do not infer that a release exists
110
+ from a README or source version string; the next public release will receive
111
+ an explicit dated section only when its annotated tag and GitHub Release are
112
+ published.
113
+
114
+ [Unreleased]: https://github.com/IotA-asce/lore/compare/v0.4.3...HEAD
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mun Nasif
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.