File size: 2,190 Bytes
80f50ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""
Codebook (universal annotation feature).

A mutable, optionally nested set of codes (labels) backed by the
universal `project.sqlite`. Opt-in per scheme via
`annotation_schemes[].codebook: true`; `codebook_mode`
(fixed|extensible|open) governs whether annotators may add codes on the
fly. Universal — usable in standard annotation, solo mode (human + LLM
co-edit), and QDA mode.

Layers:
- `store`    — SQLite persistence (codes + annotation_codes).
- `codebook` — read-model: tree + flat label list for the schema bridge.
- `service`  — the single audited mutation path (create/rename/recolor/
  move_under/delete + annotation links); fires change listeners (ICL
  prompt-cache invalidation).
"""

# Import order matters: .service -> .store registers the 0001_codebook
# migration (CREATE TABLE codes) which .revision's ALTER depends on.
from .service import (
    CodebookCycleError,
    CodebookError,
    CodeNotFound,
    DuplicateCodeError,
    apply_code,
    clear_change_listeners,
    codes_on,
    create_code,
    delete_code,
    merge_codes,
    move_under,
    recolor_code,
    register_change_listener,
    remove_code,
    rename_code,
    split_code,
)
from .codebook import Codebook
from .similar import derive_code_name, similar_code_names
from . import revision
from . import changelog
from .changelog import propose_change
from .revision import (
    all_stale_instances,
    codes_added_since,
    current_revision,
    instance_revision,
    record_annotation,
    stale_instances,
    touch_instances,
)

__all__ = [
    "Codebook",
    "CodebookError",
    "CodeNotFound",
    "DuplicateCodeError",
    "CodebookCycleError",
    "create_code",
    "rename_code",
    "recolor_code",
    "move_under",
    "delete_code",
    "merge_codes",
    "split_code",
    "touch_instances",
    "apply_code",
    "remove_code",
    "codes_on",
    "register_change_listener",
    "clear_change_listeners",
    "revision",
    "current_revision",
    "record_annotation",
    "instance_revision",
    "stale_instances",
    "all_stale_instances",
    "codes_added_since",
    "derive_code_name",
    "similar_code_names",
    "changelog",
    "propose_change",
]