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.
- oldhand-0.6.0b1/.gitignore +16 -0
- oldhand-0.6.0b1/CHANGELOG.md +114 -0
- oldhand-0.6.0b1/LICENSE +21 -0
- oldhand-0.6.0b1/PKG-INFO +587 -0
- oldhand-0.6.0b1/README.md +540 -0
- oldhand-0.6.0b1/benchmarks/synthetic/LICENSE.md +9 -0
- oldhand-0.6.0b1/benchmarks/synthetic/README.md +37 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/auth-cache-principal-scoped.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/billing-cutoff-is-utc.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/config-replaces-defaults.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/constraints/payment-webhook-idempotency.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/decisions/migrations-are-explicit.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/fixture/memory/lessons/feature-flag-retirement.md +33 -0
- oldhand-0.6.0b1/benchmarks/synthetic/queries.json +36 -0
- oldhand-0.6.0b1/benchmarks/synthetic/results.json +92 -0
- oldhand-0.6.0b1/docs/CLI_SPEC.md +628 -0
- oldhand-0.6.0b1/docs/LESSONS.md +182 -0
- oldhand-0.6.0b1/docs/METRICS.md +119 -0
- oldhand-0.6.0b1/docs/MIGRATING_AN_ARCHIVE.md +83 -0
- oldhand-0.6.0b1/docs/RECONCILING_AN_EXISTING_ARCHIVE.md +178 -0
- oldhand-0.6.0b1/docs/advanced-replay.md +179 -0
- oldhand-0.6.0b1/docs/audits/2026-09-18-pre-public-history-audit.md +48 -0
- oldhand-0.6.0b1/docs/audits/2026-09-19-pre-public-history-audit.md +64 -0
- oldhand-0.6.0b1/docs/brand-decision.md +134 -0
- oldhand-0.6.0b1/docs/charts.py +504 -0
- oldhand-0.6.0b1/docs/diagrams/agent-interface.drawio +33 -0
- oldhand-0.6.0b1/docs/diagrams/curation.drawio +60 -0
- oldhand-0.6.0b1/docs/diagrams/everyday-loop.drawio +33 -0
- oldhand-0.6.0b1/docs/diagrams/lifecycle.drawio +42 -0
- oldhand-0.6.0b1/docs/diagrams/replay-loop.drawio +36 -0
- oldhand-0.6.0b1/docs/evidence.md +90 -0
- oldhand-0.6.0b1/docs/evolution/ten-generations.md +184 -0
- oldhand-0.6.0b1/docs/img/architecture.svg +39 -0
- oldhand-0.6.0b1/docs/img/beforeafter.svg +45 -0
- oldhand-0.6.0b1/docs/img/budget.svg +53 -0
- oldhand-0.6.0b1/docs/img/cli-tour.svg +17 -0
- oldhand-0.6.0b1/docs/img/collections.svg +37 -0
- oldhand-0.6.0b1/docs/img/curation.svg +29 -0
- oldhand-0.6.0b1/docs/img/demo-session.svg +20 -0
- oldhand-0.6.0b1/docs/img/inflation.svg +37 -0
- oldhand-0.6.0b1/docs/img/lifecycle.svg +19 -0
- oldhand-0.6.0b1/docs/img/precision.svg +45 -0
- oldhand-0.6.0b1/docs/img/replay-loop.svg +40 -0
- oldhand-0.6.0b1/docs/img/stages.svg +29 -0
- oldhand-0.6.0b1/docs/img/workflow.svg +18 -0
- oldhand-0.6.0b1/docs/integrations-setup-research.md +123 -0
- oldhand-0.6.0b1/docs/internal/README.md +12 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-17-five-iteration-improvements.md +100 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-discovery-replay-loop.md +96 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-open-source-launch-readiness.md +455 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-readme-with-soul.md +22 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-curation-improvements.md +108 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-generation-evolution.md +45 -0
- oldhand-0.6.0b1/docs/internal/plans/2026-09-18-ten-lifecycle-improvements.md +117 -0
- oldhand-0.6.0b1/docs/internal/plans/five-iteration-improvements.md +17 -0
- oldhand-0.6.0b1/docs/internal/plans/ten-curation-improvements.md +9 -0
- oldhand-0.6.0b1/docs/internal/plans/ten-lifecycle-improvements.md +10 -0
- oldhand-0.6.0b1/docs/make_demo_svg.py +112 -0
- oldhand-0.6.0b1/examples/demo/README.md +52 -0
- oldhand-0.6.0b1/examples/demo/TRANSCRIPT.md +37 -0
- oldhand-0.6.0b1/examples/demo/oldhand-demo.tape +42 -0
- oldhand-0.6.0b1/examples/run_demo.py +97 -0
- oldhand-0.6.0b1/examples/sample-project/README.md +17 -0
- oldhand-0.6.0b1/examples/sample-project/SYNTHETIC_EXAMPLE.md +10 -0
- oldhand-0.6.0b1/examples/sample-project/config/defaults.json +5 -0
- oldhand-0.6.0b1/examples/sample-project/config/staging.json +3 -0
- oldhand-0.6.0b1/examples/sample-project/config_loader.py +18 -0
- oldhand-0.6.0b1/examples/sample-project/memory/constraints/environment-config-replaces-defaults.md +48 -0
- oldhand-0.6.0b1/memory/README.md +35 -0
- oldhand-0.6.0b1/pyproject.toml +54 -0
- oldhand-0.6.0b1/requirements.txt +1 -0
- oldhand-0.6.0b1/src/oldhand/__init__.py +10 -0
- oldhand-0.6.0b1/src/oldhand/analysis.py +825 -0
- oldhand-0.6.0b1/src/oldhand/authoring.py +36 -0
- oldhand-0.6.0b1/src/oldhand/cli.py +645 -0
- oldhand-0.6.0b1/src/oldhand/constants.py +172 -0
- oldhand-0.6.0b1/src/oldhand/experience.py +779 -0
- oldhand-0.6.0b1/src/oldhand/harness.py +716 -0
- oldhand-0.6.0b1/src/oldhand/indexing.py +448 -0
- oldhand-0.6.0b1/src/oldhand/records.py +82 -0
- oldhand-0.6.0b1/src/oldhand/schema.sql +92 -0
- oldhand-0.6.0b1/src/oldhand/search.py +1084 -0
- oldhand-0.6.0b1/src/oldhand/validation.py +131 -0
- oldhand-0.6.0b1/src/oldhand/workspace.py +150 -0
- oldhand-0.6.0b1/tests/test_cli.py +1422 -0
- oldhand-0.6.0b1/tests/test_e2e.py +475 -0
- oldhand-0.6.0b1/tests/test_install.py +382 -0
- oldhand-0.6.0b1/tests/test_migrations.py +366 -0
- oldhand-0.6.0b1/tests/test_run_demo.py +46 -0
- oldhand-0.6.0b1/tests/test_synthetic_benchmark.py +24 -0
- oldhand-0.6.0b1/tools/install.py +299 -0
- oldhand-0.6.0b1/tools/migrate/_overrides.py +78 -0
- oldhand-0.6.0b1/tools/migrate/from_claude_memory.py +305 -0
- oldhand-0.6.0b1/tools/migrate/from_markdown.py +268 -0
- oldhand-0.6.0b1/tools/migrate/from_repo_memory.py +459 -0
- oldhand-0.6.0b1/tools/migrate/resync.py +137 -0
- oldhand-0.6.0b1/tools/run_synthetic_benchmark.py +138 -0
- 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
|
oldhand-0.6.0b1/LICENSE
ADDED
|
@@ -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.
|