buildlog 0.7.0__py3-none-any.whl → 0.8.0__py3-none-any.whl

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 (38) hide show
  1. buildlog/__init__.py +1 -1
  2. buildlog/cli.py +436 -44
  3. buildlog/confidence.py +27 -0
  4. buildlog/core/__init__.py +2 -0
  5. buildlog/core/bandit.py +699 -0
  6. buildlog/core/operations.py +265 -11
  7. buildlog/distill.py +80 -1
  8. buildlog/engine/__init__.py +61 -0
  9. buildlog/engine/bandit.py +23 -0
  10. buildlog/engine/confidence.py +28 -0
  11. buildlog/engine/embeddings.py +28 -0
  12. buildlog/engine/experiments.py +619 -0
  13. buildlog/engine/types.py +31 -0
  14. buildlog/llm.py +461 -0
  15. buildlog/mcp/server.py +6 -6
  16. buildlog/mcp/tools.py +61 -13
  17. buildlog/render/__init__.py +19 -2
  18. buildlog/render/claude_md.py +67 -32
  19. buildlog/render/continue_dev.py +102 -0
  20. buildlog/render/copilot.py +100 -0
  21. buildlog/render/cursor.py +105 -0
  22. buildlog/render/windsurf.py +95 -0
  23. buildlog/skills.py +69 -6
  24. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/copier.yml +0 -4
  25. buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE_QUICK.md +21 -0
  26. buildlog-0.8.0.dist-info/METADATA +151 -0
  27. buildlog-0.8.0.dist-info/RECORD +54 -0
  28. buildlog-0.7.0.dist-info/METADATA +0 -544
  29. buildlog-0.7.0.dist-info/RECORD +0 -41
  30. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/post_gen.py +0 -0
  31. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/.gitkeep +0 -0
  32. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/2026-01-01-example.md +0 -0
  33. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/BUILDLOG_SYSTEM.md +0 -0
  34. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/_TEMPLATE.md +0 -0
  35. {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/assets/.gitkeep +0 -0
  36. {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/WHEEL +0 -0
  37. {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/entry_points.txt +0 -0
  38. {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/licenses/LICENSE +0 -0
buildlog/skills.py CHANGED
@@ -23,7 +23,10 @@ import re
23
23
  from dataclasses import dataclass, field
24
24
  from datetime import date, datetime, timezone
25
25
  from pathlib import Path
26
- from typing import Final, Literal, TypedDict
26
+ from typing import TYPE_CHECKING, Final, Literal, TypedDict
27
+
28
+ if TYPE_CHECKING:
29
+ from buildlog.llm import LLMBackend
27
30
 
28
31
  from buildlog.confidence import ConfidenceConfig, ConfidenceMetrics
29
32
  from buildlog.confidence import calculate_confidence as calculate_continuous_confidence
@@ -83,6 +86,10 @@ class SkillDict(_SkillDictRequired, total=False):
83
86
  antipattern: str # What does violation look like?
84
87
  rationale: str # Why does this matter?
85
88
  persona_tags: list[str] # Which reviewers use this rule?
89
+ # LLM-extracted scoring fields
90
+ severity: str # critical/major/minor/info
91
+ scope: str # global/module/function
92
+ applicability: list[str] # contexts where relevant
86
93
 
87
94
 
88
95
  class SkillSetDict(TypedDict):
@@ -115,6 +122,9 @@ class Skill:
115
122
  antipattern: What does violation look like? (defensibility)
116
123
  rationale: Why does this rule matter? (defensibility)
117
124
  persona_tags: Which reviewer personas use this rule?
125
+ severity: How bad is ignoring this rule? (critical/major/minor/info)
126
+ scope: How broadly does this rule apply? (global/module/function)
127
+ applicability: Contexts where this rule is relevant.
118
128
  """
119
129
 
120
130
  id: str
@@ -131,6 +141,10 @@ class Skill:
131
141
  antipattern: str | None = None
132
142
  rationale: str | None = None
133
143
  persona_tags: list[str] = field(default_factory=list)
144
+ # LLM-extracted scoring
145
+ severity: str | None = None
146
+ scope: str | None = None
147
+ applicability: list[str] = field(default_factory=list)
134
148
 
135
149
  def to_dict(self) -> SkillDict:
136
150
  """Convert to dictionary for serialization.
@@ -159,6 +173,12 @@ class Skill:
159
173
  result["rationale"] = self.rationale
160
174
  if self.persona_tags:
161
175
  result["persona_tags"] = self.persona_tags
176
+ if self.severity is not None:
177
+ result["severity"] = self.severity
178
+ if self.scope is not None:
179
+ result["scope"] = self.scope
180
+ if self.applicability:
181
+ result["applicability"] = self.applicability
162
182
  return result
163
183
 
164
184
 
@@ -326,6 +346,7 @@ def _deduplicate_insights(
326
346
  patterns: list[PatternDict],
327
347
  threshold: float = MIN_SIMILARITY_THRESHOLD,
328
348
  backend: EmbeddingBackend | None = None,
349
+ llm_backend: LLMBackend | None = None,
329
350
  ) -> list[tuple[str, int, list[str], date | None, date | None]]:
330
351
  """Deduplicate similar insights into merged rules.
331
352
 
@@ -366,9 +387,17 @@ def _deduplicate_insights(
366
387
  results: list[tuple[str, int, list[str], date | None, date | None]] = []
367
388
 
368
389
  for group in groups:
369
- # Use the shortest insight as the canonical rule (often cleaner)
370
- canonical = min(group, key=lambda p: len(p["insight"]))
371
- rule = canonical["insight"]
390
+ # Use LLM to select canonical form if available and group has >1 member
391
+ if llm_backend is not None and len(group) > 1:
392
+ try:
393
+ candidates = [p["insight"] for p in group]
394
+ rule = llm_backend.select_canonical(candidates)
395
+ except Exception:
396
+ canonical = min(group, key=lambda p: len(p["insight"]))
397
+ rule = canonical["insight"]
398
+ else:
399
+ canonical = min(group, key=lambda p: len(p["insight"]))
400
+ rule = canonical["insight"]
372
401
  frequency = len(group)
373
402
  sources = sorted(set(p["source"] for p in group))
374
403
 
@@ -434,6 +463,7 @@ def generate_skills(
434
463
  embedding_backend: str | None = None,
435
464
  confidence_config: ConfidenceConfig | None = None,
436
465
  include_review_learnings: bool = True,
466
+ llm: bool = False,
437
467
  ) -> SkillSet:
438
468
  """Generate skills from buildlog patterns and review learnings.
439
469
 
@@ -449,12 +479,21 @@ def generate_skills(
449
479
  include_review_learnings: Whether to include learnings from code reviews.
450
480
  When True, loads .buildlog/review_learnings.json and merges
451
481
  review learnings into the skill set.
482
+ llm: If True and an LLM backend is available, use LLM for extraction,
483
+ canonical selection, and scoring. Falls back gracefully.
452
484
 
453
485
  Returns:
454
486
  SkillSet with generated skills.
455
487
  """
488
+ # Resolve LLM backend if requested
489
+ llm_backend = None
490
+ if llm:
491
+ from buildlog.llm import get_llm_backend
492
+
493
+ llm_backend = get_llm_backend(buildlog_dir=buildlog_dir)
494
+
456
495
  # Get distilled patterns
457
- result = distill_all(buildlog_dir, since=since_date)
496
+ result = distill_all(buildlog_dir, since=since_date, llm=llm)
458
497
 
459
498
  # Get embedding backend
460
499
  backend = (
@@ -471,7 +510,9 @@ def generate_skills(
471
510
 
472
511
  for category in CATEGORIES:
473
512
  patterns = result.patterns.get(category, [])
474
- deduplicated = _deduplicate_insights(patterns, backend=backend)
513
+ deduplicated = _deduplicate_insights(
514
+ patterns, backend=backend, llm_backend=llm_backend
515
+ )
475
516
 
476
517
  skills: list[Skill] = []
477
518
  for rule, frequency, sources, most_recent, earliest in deduplicated:
@@ -490,6 +531,25 @@ def generate_skills(
490
531
  confidence_score, confidence_config
491
532
  ).value
492
533
 
534
+ # LLM scoring for severity/scope/applicability
535
+ severity: str | None = None
536
+ scope: str | None = None
537
+ applicability_tags: list[str] = []
538
+ if llm_backend is not None:
539
+ try:
540
+ scoring = llm_backend.score_rule(rule, category)
541
+ severity = scoring.severity
542
+ scope = scoring.scope
543
+ applicability_tags = scoring.applicability
544
+ except Exception:
545
+ pass # Keep defaults (None/empty)
546
+
547
+ # Apply severity weighting to confidence score
548
+ if confidence_score is not None and severity is not None:
549
+ from buildlog.confidence import apply_severity_weight
550
+
551
+ confidence_score = apply_severity_weight(confidence_score, severity)
552
+
493
553
  skill = Skill(
494
554
  id=_generate_skill_id(category, rule),
495
555
  category=category,
@@ -500,6 +560,9 @@ def generate_skills(
500
560
  tags=_extract_tags(rule),
501
561
  confidence_score=confidence_score,
502
562
  confidence_tier=confidence_tier,
563
+ severity=severity,
564
+ scope=scope,
565
+ applicability=applicability_tags,
503
566
  )
504
567
  skills.append(skill)
505
568
 
@@ -20,10 +20,6 @@ update_claude_md:
20
20
  help: Add buildlog instructions to CLAUDE.md if it exists?
21
21
  default: true
22
22
 
23
- # Post-generation tasks
24
- _tasks:
25
- - "{{ 'python3 post_gen.py' if update_claude_md else 'echo Skipping CLAUDE.md update' }}"
26
-
27
23
  _message_after_copy: |
28
24
  Build journal installed!
29
25
 
@@ -0,0 +1,21 @@
1
+ # Build Journal: [TITLE]
2
+
3
+ **Date:** [YYYY-MM-DD]
4
+ **Duration:** [X hours]
5
+
6
+ ## What I Did
7
+
8
+ [What you built, fixed, or changed. 2-3 sentences.]
9
+
10
+ ## What Went Wrong
11
+
12
+ [Mistakes, surprises, dead ends. Be specific — these become rules.]
13
+
14
+ ## What I Learned
15
+
16
+ ### Improvements
17
+
18
+ - [One thing to do differently next time]
19
+ - [One thing that worked well to repeat]
20
+
21
+ *More sections: see _TEMPLATE.md for the full format.*
@@ -0,0 +1,151 @@
1
+ Metadata-Version: 2.4
2
+ Name: buildlog
3
+ Version: 0.8.0
4
+ Summary: Engineering notebook for AI-assisted development
5
+ Project-URL: Homepage, https://github.com/Peleke/buildlog-template
6
+ Project-URL: Repository, https://github.com/Peleke/buildlog-template
7
+ Author: Peleke Sengstacke
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: ai,buildlog,development,documentation,journal
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Documentation
21
+ Classifier: Topic :: Software Development :: Documentation
22
+ Requires-Python: >=3.10
23
+ Requires-Dist: click>=8.0.0
24
+ Requires-Dist: copier>=9.0.0
25
+ Requires-Dist: numpy>=1.21.0
26
+ Requires-Dist: pymupdf>=1.26.7
27
+ Requires-Dist: pyyaml>=6.0.0
28
+ Provides-Extra: all
29
+ Requires-Dist: anthropic>=0.40.0; extra == 'all'
30
+ Requires-Dist: mcp>=1.0.0; extra == 'all'
31
+ Requires-Dist: ollama>=0.4.0; extra == 'all'
32
+ Requires-Dist: openai>=1.0.0; extra == 'all'
33
+ Requires-Dist: sentence-transformers>=2.2.0; extra == 'all'
34
+ Provides-Extra: anthropic
35
+ Requires-Dist: anthropic>=0.40.0; extra == 'anthropic'
36
+ Provides-Extra: dev
37
+ Requires-Dist: black>=24.0.0; extra == 'dev'
38
+ Requires-Dist: flake8>=7.0.0; extra == 'dev'
39
+ Requires-Dist: isort>=5.13.0; extra == 'dev'
40
+ Requires-Dist: mkdocs-material>=9.5.0; extra == 'dev'
41
+ Requires-Dist: mypy>=1.8.0; extra == 'dev'
42
+ Requires-Dist: pre-commit>=3.6.0; extra == 'dev'
43
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
44
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
45
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
46
+ Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
47
+ Provides-Extra: embeddings
48
+ Requires-Dist: sentence-transformers>=2.2.0; extra == 'embeddings'
49
+ Provides-Extra: engine
50
+ Provides-Extra: llm
51
+ Requires-Dist: anthropic>=0.40.0; extra == 'llm'
52
+ Requires-Dist: ollama>=0.4.0; extra == 'llm'
53
+ Provides-Extra: mcp
54
+ Requires-Dist: mcp>=1.0.0; extra == 'mcp'
55
+ Provides-Extra: ollama
56
+ Requires-Dist: ollama>=0.4.0; extra == 'ollama'
57
+ Provides-Extra: openai
58
+ Requires-Dist: openai>=1.0.0; extra == 'openai'
59
+ Description-Content-Type: text/markdown
60
+
61
+ <div align="center">
62
+
63
+ # buildlog
64
+
65
+ ### The Only Agent Learning System You Can Prove Works
66
+
67
+ [![PyPI](https://img.shields.io/pypi/v/buildlog?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/buildlog/)
68
+ [![Python](https://img.shields.io/pypi/pyversions/buildlog?style=for-the-badge&logo=python&logoColor=white)](https://python.org/)
69
+ [![CI](https://img.shields.io/github/actions/workflow/status/Peleke/buildlog-template/ci.yml?branch=main&style=for-the-badge&logo=github&label=CI)](https://github.com/Peleke/buildlog-template/actions/workflows/ci.yml)
70
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
71
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue?style=for-the-badge&logo=github)](https://peleke.github.io/buildlog-template/)
72
+
73
+ **Falsifiable claims. Measurable outcomes. No vibes.**
74
+
75
+ <img src="assets/hero-banner-perfectdeliberate.png" alt="buildlog - The Only Agent Learning System You Can Prove Works" width="800"/>
76
+
77
+ > **RE: The art** — Yes, it's AI-generated. Yes, that's hypocritical for a project about rigor over vibes. Looking for an actual artist to pay for a real logo. If you know someone good, [open an issue](https://github.com/Peleke/buildlog-template/issues) or DM me. Budget exists.
78
+
79
+ **[Read the full documentation](https://peleke.github.io/buildlog-template/)**
80
+
81
+ </div>
82
+
83
+ ---
84
+
85
+ Everyone's building "agent memory." Blog posts announce breakthroughs. Products ship with "learning" in the tagline. Ask them one question: **How do you know it works?**
86
+
87
+ buildlog gives you the infrastructure to answer with data. It captures engineering knowledge from work sessions, extracts rules, selects which rules to surface using a Thompson Sampling bandit, and measures impact via Repeated Mistake Rate (RMR) across tracked experiments.
88
+
89
+ ## Features
90
+
91
+ - **Structured capture** — Document work sessions as entries with mistakes, decisions, and outcomes
92
+ - **Rule extraction** — Distill and deduplicate patterns into actionable rules
93
+ - **Thompson Sampling bandit** — Automatic rule selection that balances exploration and exploitation
94
+ - **Experiment tracking** — Sessions, mistakes, RMR calculation with statistical rigor
95
+ - **Review gauntlet** — Curated reviewer personas (Security Karen, Test Terrorist) with HITL checkpoints
96
+ - **Multi-agent support** — Render rules to Claude Code, Cursor, GitHub Copilot, Windsurf, Continue.dev
97
+ - **MCP server** — Full Claude Code integration via `buildlog-mcp`
98
+
99
+ ## Quick Start
100
+
101
+ ```bash
102
+ uv pip install buildlog # or: pip install buildlog (inside a venv)
103
+ buildlog init
104
+ buildlog new my-feature
105
+ buildlog distill && buildlog skills
106
+ buildlog experiment start
107
+ # ... work ...
108
+ buildlog experiment end
109
+ buildlog experiment report
110
+ ```
111
+
112
+ ## Documentation
113
+
114
+ | Section | Description |
115
+ |---------|------------|
116
+ | [Installation](https://peleke.github.io/buildlog-template/getting-started/installation/) | Setup, extras, and initialization |
117
+ | [Quick Start](https://peleke.github.io/buildlog-template/getting-started/quick-start/) | Full pipeline walkthrough |
118
+ | [Core Concepts](https://peleke.github.io/buildlog-template/getting-started/concepts/) | The problem, the claim, and the metric |
119
+ | [CLI Reference](https://peleke.github.io/buildlog-template/guides/cli-reference/) | Every command documented |
120
+ | [MCP Integration](https://peleke.github.io/buildlog-template/guides/mcp-integration/) | Claude Code setup and available tools |
121
+ | [Experiments](https://peleke.github.io/buildlog-template/guides/experiments/) | Running and measuring experiments |
122
+ | [Review Gauntlet](https://peleke.github.io/buildlog-template/guides/review-gauntlet/) | Reviewer personas and the gauntlet loop |
123
+ | [Multi-Agent Setup](https://peleke.github.io/buildlog-template/guides/multi-agent/) | Render rules to any AI coding agent |
124
+ | [Theory](https://peleke.github.io/buildlog-template/theory/00-background/) | The math behind Thompson Sampling |
125
+ | [Philosophy](https://peleke.github.io/buildlog-template/philosophy/) | Principles and honest limitations |
126
+
127
+ ## Contributing
128
+
129
+ ```bash
130
+ git clone https://github.com/Peleke/buildlog-template
131
+ cd buildlog-template
132
+ uv venv && source .venv/bin/activate
133
+ uv pip install -e ".[dev]"
134
+ pytest
135
+ ```
136
+
137
+ We're especially interested in better context representations, credit assignment approaches, statistical methodology improvements, and real-world experiment results (positive or negative).
138
+
139
+ ## License
140
+
141
+ MIT License — see [LICENSE](./LICENSE)
142
+
143
+ ---
144
+
145
+ <div align="center">
146
+
147
+ **"Agent learning" without measurement is just prompt engineering with extra steps.**
148
+
149
+ **buildlog is measurement.**
150
+
151
+ </div>
@@ -0,0 +1,54 @@
1
+ buildlog/__init__.py,sha256=wxluyg3fDOiaKUAOJa0cav39hwtNJS5Y_0X20uL_yi4,90
2
+ buildlog/cli.py,sha256=G2d2N2cmC3HEiYc6_mQhRyW8PLHzrHr2Kx38ooQsMlU,59456
3
+ buildlog/confidence.py,sha256=jPvN0_3drGHQG1C7iUxUtYjKC62nNKsHHxu6WXMfJFg,10137
4
+ buildlog/distill.py,sha256=PL7UBToBb27BrCOTWGBTDIXGggtrUumHHBs0_MfG6vY,14166
5
+ buildlog/embeddings.py,sha256=vPydWjJVkYp172zFou-lJ737qsu6vRMQAMs143RGIpA,12364
6
+ buildlog/llm.py,sha256=vXFT03BZVI8GMX-ybSK18SoeABaZbr_B2KXm8WsNews,15278
7
+ buildlog/seeds.py,sha256=L-lzO7rrDjMdVHcYKvEBm6scVDfCmFD0koiyafMZDLo,8596
8
+ buildlog/skills.py,sha256=3CihyyAFfJh0w0VNXQauNhGm_RM8m_GIO1iiNLNPmsQ,33789
9
+ buildlog/stats.py,sha256=2WdHdmzUNGobtWngmm9nA_UmqM7DQeAnZL8_rLQN8aw,13256
10
+ buildlog/core/__init__.py,sha256=gPd6ava_sei0sYIS4NdeHgCVwJ2wEjyLt-Rxz_11IWU,1626
11
+ buildlog/core/bandit.py,sha256=0z58s42jpQiBgXdjb465apenWdBVTvoc7bDOcnAcPLo,24565
12
+ buildlog/core/operations.py,sha256=4gElPJBG9zlXoXO6CPTolwoRrd45DOIV6X1SAQbF3zE,70205
13
+ buildlog/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ buildlog/data/seeds/security_karen.yaml,sha256=Hjwp4j6FB-e0vCXp6AkyhAEkwASR4H1owdhPBID740E,8775
15
+ buildlog/data/seeds/test_terrorist.yaml,sha256=-QY2x6d0LrlM6msMYaYwR43Wny9ZybQmU7pH_E7gSB0,11113
16
+ buildlog/engine/__init__.py,sha256=KNTSUZTUHK6r2abAA-2PIb0wUcRgbE4juvBmoywaXHI,1750
17
+ buildlog/engine/bandit.py,sha256=rfwfQjULakzm-H5bMa5R-iqtI7iibgR4y2JoRhD4zRk,485
18
+ buildlog/engine/confidence.py,sha256=7Zhw8bwT_S-qeVaGXT6dHOyjDTvwyhetLKCWhJH9jMc,656
19
+ buildlog/engine/embeddings.py,sha256=78InITcBbaPZ29tUlb4hJNNVZ1fhxstvVa2fYvOh6QA,597
20
+ buildlog/engine/experiments.py,sha256=38f_UsbY4TP3LTGM9yUsZxoXqxUGOxmLCoYrfZqjVks,20041
21
+ buildlog/engine/types.py,sha256=W7U2B4TE79xACV0cuaidKevmTEskxqXfltH5hjIxV5k,734
22
+ buildlog/mcp/__init__.py,sha256=jCLNUkYFrDcPd5dY9xbaaVANl-ZzdPim1BykgGY7f7U,334
23
+ buildlog/mcp/server.py,sha256=vzgT_-SUWNNx9bvABJBgT7rHNGPx_nB7pVo-04WbwjI,1249
24
+ buildlog/mcp/tools.py,sha256=k1f6R7Dgcx0VIKzTNezkcRc0UVkWXWkk-uGkRq1sIiw,17578
25
+ buildlog/render/__init__.py,sha256=jj-o-vPdqpivdFKK85xskCOT8Zn_2tb3Q5Jb0gWLjAg,2567
26
+ buildlog/render/base.py,sha256=gQfvOsH1zttAo10xtEyNsAbqZ4NRSPiDihO-aiGgTsw,533
27
+ buildlog/render/claude_md.py,sha256=R5z4dHh-3YwclbW3MAzHxgYQHtd5lXS3McJJ1isLGqE,4901
28
+ buildlog/render/continue_dev.py,sha256=S76pGkHssTOEqisiRjKZTfNBRwgiChYeYBR9RKZSgME,3253
29
+ buildlog/render/copilot.py,sha256=8pvXdBWUYnenYIQ5I6L0ukk2JC-NxmNDZrbWQ0kTaqY,3268
30
+ buildlog/render/cursor.py,sha256=tAc0oWJmSXmYzofEzpe1QnkRM-KITTUzHkdSbZXxv4k,3424
31
+ buildlog/render/settings_json.py,sha256=4DS5OWksPrFCa7MIgWIu0t4rxYmItpMdGfTqMX3aMNs,2495
32
+ buildlog/render/skill.py,sha256=_7umIS1Ms1oQ2_PopYueFjX41nMq1p28yJp6DhXFdgU,5981
33
+ buildlog/render/tracking.py,sha256=1y_Mf1s3KblV8TC0W9x2a_ynSJHLwkVZJcW1gs1a6q4,1786
34
+ buildlog/render/windsurf.py,sha256=jfJLb-luQLjdBM38_KKp0mZ08bUSDTBPxSLOIFWxawQ,3047
35
+ buildlog/seed_engine/__init__.py,sha256=f2LYSAs_D1bK4CW_pt54UEmy_SB1u1MOEJlKqM7_R7E,1869
36
+ buildlog/seed_engine/categorizers.py,sha256=uzatJQPG4Vf7z7ZAeyQbL-bVJ8cUKBHG-3U93-BFIRQ,4649
37
+ buildlog/seed_engine/extractors.py,sha256=rkztg62LzFH018ob5Tl1eFp_yfPo8syn3Ib4h6bAyK4,4824
38
+ buildlog/seed_engine/generators.py,sha256=T3N3uHg359xSBypIGmvVWYI0Qh8WLlGIFQWX0_gs0I4,4358
39
+ buildlog/seed_engine/models.py,sha256=qESSuoF3CJy8pp96E3Vmb38V-snzeaW0Xg0RfbH8v1U,3418
40
+ buildlog/seed_engine/pipeline.py,sha256=wLdcjyA_B4wFEb2iKwRCUGkX-oaVu9OXIcmLcEsJN6s,6527
41
+ buildlog/seed_engine/sources.py,sha256=8j9oUFZCSKMr5VpIuAxTPY3wTzfTEmw6M_41_aismiE,11184
42
+ buildlog-0.8.0.data/data/share/buildlog/copier.yml,sha256=hD_UcLGB9eDxTGkWjHAvUoiqQKhLC0w3G-kPKX_p43I,802
43
+ buildlog-0.8.0.data/data/share/buildlog/post_gen.py,sha256=XFlo40LuPpAsBhIRRRtHqvU3_5POss4L401hp35ijhw,1744
44
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/2026-01-01-example.md,sha256=7x9sKmydfmfKyNz9hV7MtYnQJuBwbxNanbPOcpQDDZQ,7040
46
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/BUILDLOG_SYSTEM.md,sha256=osclytWwl5jUiTgSpuT4cT3h3oPvCkZ5GPCnFuJZNcY,3802
47
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE.md,sha256=CUvxgcx1-9XT_EdQ8e_vnuPq_h-u1uhXJgForJU2Pso,2932
48
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE_QUICK.md,sha256=eUr5MiqLsM6drV7rAq53R1SLkK8G7LkMAUjWKXx81IA,409
49
+ buildlog-0.8.0.data/data/share/buildlog/template/buildlog/assets/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ buildlog-0.8.0.dist-info/METADATA,sha256=JNxWkxamVUmEeEQ9vz56j4lzZwex35sJyUngqytW6c4,7032
51
+ buildlog-0.8.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
52
+ buildlog-0.8.0.dist-info/entry_points.txt,sha256=BMFclPOomp_sgaa0OqBg6LfqCMlqzjZV88ww5TrPPoo,87
53
+ buildlog-0.8.0.dist-info/licenses/LICENSE,sha256=fAgt-akug9nAwIj6M-SIf8u3ck-T7pJTwfmy9vWYASk,1074
54
+ buildlog-0.8.0.dist-info/RECORD,,