docs: restructure README, move detailed content to docs/ directory
This commit is contained in:
55
docs/HASHLINE.md
Normal file
55
docs/HASHLINE.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# The Hashline Technique
|
||||
|
||||
Hashline is AnchorCli's unique approach to safe, precise file editing.
|
||||
|
||||
## How It Works
|
||||
|
||||
Every line returned by file tools is prefixed with a content-derived hash anchor:
|
||||
|
||||
```
|
||||
function hello() {
|
||||
return "world";
|
||||
}
|
||||
```
|
||||
|
||||
The format is `lineNumber:hash|content` where:
|
||||
- `lineNumber` is the current line number in the file
|
||||
- `hash` is an Adler-8 checksum derived from the line content and position
|
||||
- `content` is the actual line text
|
||||
|
||||
## Editing with Anchors
|
||||
|
||||
When editing, you reference these `line:hash` anchors instead of reproducing old content. Before any mutation, both the line number **and** hash are validated — stale anchors are rejected immediately.
|
||||
|
||||
### Example
|
||||
|
||||
To replace lines 2-3 from the example above:
|
||||
|
||||
```json
|
||||
{
|
||||
"tool": "replace_lines",
|
||||
"path": "example.js",
|
||||
"startAnchor": "2:f1",
|
||||
"endAnchor": "3:0e",
|
||||
"newLines": [" return \"hello world\";"]
|
||||
}
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
This eliminates:
|
||||
|
||||
- **Whitespace/indentation reproduction errors** — No need to match exact spacing
|
||||
- **Silent edits to the wrong line** — Hash validation ensures you're editing the right content
|
||||
- **Entire-file rewrites** — Change just one line without touching the rest
|
||||
- **Line drift in batch operations** — BatchEdit validates all anchors upfront and applies changes bottom-to-top
|
||||
|
||||
## Key Principles
|
||||
|
||||
1. **Never include anchors in your content** — When using `replace_lines`, `insert_after`, or similar tools, the `newLines` parameter should contain raw source code only, WITHOUT the `lineNumber:hash|` prefix
|
||||
2. **Always validate before editing** — Re-read files to get fresh anchors if your previous anchors fail validation
|
||||
3. **Use BatchEdit for multiple changes** — This validates all anchors upfront and applies operations atomically
|
||||
|
||||
---
|
||||
|
||||
*Back to [README.md](../README.md)* | *See [TOOLS.md](TOOLS.md) for all available tools*
|
||||
Reference in New Issue
Block a user