Skip to content
This repository was archived by the owner on Apr 30, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,26 @@ All notable changes to LexHarmoni are documented here.

---

## [0.1.0-final] — 2026-04-30

### Archived
- Repository archived as hackathon submission snapshot
- No further development planned in this repository

### Added (post-submission, before archive)
- CI/CD workflows: GitHub Actions CI, security scan, Dependabot configuration (see `[ci-setup]` entry)
- `regulasi-id-corpus-prep` spawned as independent tool for Indonesian regulatory PDF corpus preparation
— now available on PyPI: [`pip install regulasi-id-corpus-prep`](https://github.com/ziffan/regulasi-id-corpus-prep)
- Archive documentation: bilingual archive notice in README, KNOWN_ISSUES.md

### Notes
- Original hackathon submission preserved at tag `v0.1.0`
- All routine (non-security) Dependabot PRs (#5–#11) closed without merge to maintain scope discipline;
no security-related advisories were identified — see DECISIONS.md for rationale
- Successor project to be linked when initialized

---

## [Unreleased]

- Pertimbangkan `temperature=0` untuk output lebih deterministik
Expand Down
23 changes: 23 additions & 0 deletions DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,26 @@ Context: CI/CD added post-hackathon for repo hygiene and security. Project is a
Decision: CI does NOT call the Anthropic API. Smoke testing of API integration is performed manually pre-release.
Rationale: cost ($1.70–$6.75 per run), API key secret management complexity, and preference for deterministic CI.
Consequence: regression in API integration may not be caught by CI; compensating control is the manual smoke test (ST1/ST2 protocol in `docs/`) before tagging releases.

---

## Decision: Archive v0.1.0 as Hackathon Submission Snapshot

Date: 2026-04-30
Context: v0.1.0 was submitted to Cerebral Valley × Anthropic "Built with Opus 4.7" Hackathon in April 2026 with locked scope (see prior decisions and CHANGELOG `[ci-setup]` entry). Post-submission validation feedback from law firm prospects identified three features required for production use: multi-provider LLM support, flexible corpus selection, and prompt tuning from UI. These changes are architecturally incompatible with the hackathon submission's single-provider, fixed-corpus design. Continuing development in this repository would either (1) compromise hackathon submission integrity, or (2) create a confusing dual-purpose repository.

Decision: Archive this repository as a read-only snapshot. Two-tier tag preservation:
- `v0.1.0` — preserves exact hackathon submission state (do not modify)
- `v0.1.0-final` — preserves archived state including post-submission CI activation, Dependabot triage, and documentation updates

Continue development in a separate successor repository (to be initialized).

Rationale:
- Clean separation between hackathon artifact and commercial-direction successor
- Reproducibility preserved via two-tier tags
- Portfolio narrative remains coherent: submission → spawned tool → successor
- No scope confusion for visitors, reviewers, or potential users

Consequence: Bug reports cannot be resolved in this repository. Dependency rot will eventually compromise runnability; mitigated by pinned versions in dependency manifests, documented Python/Node versions, and KNOWN_ISSUES.md transparency. Successor repository link to be added post-archive via pinned GitHub issue (no unarchive needed).

Dependabot PRs categorized: no security advisories were identified; all 7 routine version-bump PRs (#5–#11) closed without merge. The spawned tool `regulasi-id-corpus-prep` (separate repository) remains independent and active under its own development lifecycle.
89 changes: 89 additions & 0 deletions KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Known Issues — Not Fixed in v0.1.0-final

These issues are documented for transparency. **They will not be resolved in
this archived repository.** They may or may not be addressed in the successor
project.

## Archive Status

This repository was archived on April 30, 2026. See README.md and DECISIONS.md
for full context on the archive decision.

---

## Hackathon Scope Constraints (Intentional, Not Bugs)

These were design decisions made for hackathon scope discipline. They are
limitations, not defects. The successor project plans to address them.
See DECISIONS.md for architectural rationale.

- **Single LLM provider:** Anthropic Claude only. No OpenAI, OpenRouter,
Gemini, or other provider support.
- **Fixed corpus:** Hardcoded Indonesian P2P lending regulatory dataset (7
regulations, OJK LPBBTI domain). Users cannot upload custom corpora or
switch between corpora at runtime.
- **No prompt customization:** Prompts are hardcoded in `backend/prompt_loader.py`.
Users cannot edit, version, or tune prompts via UI.
- **Single tenancy:** No multi-user, no workspace isolation, no role-based
access control.
- **No persistent storage of queries:** Each session is ephemeral. Analysis
results are not saved between page refreshes.
- **Retrospective validation only:** The demo validates LexHarmoni against
already-enacted regulation. Ex-ante deployment in an active drafting workflow
has not been tested.

---

## Functional Limitations (Documented, Not Bugs)

### Pytest test suite not yet implemented

No pytest-discoverable test files exist in the `tests/` directory. The CI
`backend-lint-and-test` job exits cleanly via an `exit 5` workaround
(`|| [ $? -eq 5 ]` in `ci.yml`) — pytest exit code 5 means "no tests
collected", which is treated as a passing state. The `requires_api` pytest
marker is defined in `pyproject.toml` but is not exercised by any test file.

The two validation scripts in `tests/` (`validate_corpus.py`,
`validate_severity_lock.py`) are run-on-demand tools, not pytest test cases.

### `validate_severity_lock.py` excluded from CI

`tests/validate_severity_lock.py` validates that the model's severity
calibration (normative→critical, hierarchical→major, operational→minor) is
correct across live runs. It requires a running backend server and a live
Anthropic API key. It is run manually pre-release per the smoke test protocol
in `docs/`. It is intentionally excluded from CI per the "Decision: CI scope
excludes Anthropic API calls" in DECISIONS.md.

### Stochastic secondary findings (non-deterministic count)

The three core friction patterns surface consistently across all recorded runs.
Secondary findings (finding count 4–5) vary by run due to stochastic sampling.
This is expected behavior from language model inference, not a bug. Using
`temperature=0` may reduce variance (noted in CHANGELOG `[Unreleased]` as a
future consideration).

---

## Dependency Risks

- Dependencies pinned to versions current as of archive date (April 30, 2026).
- **Python version:** 3.11 (see `pyproject.toml` `python_version`).
- **Node version:** ≥20 (see `@types/node` version constraint in
`frontend/package.json`; CI runs on Node 20).
- Anthropic SDK, Next.js, and other dependencies may have breaking changes in
future major versions. No further patches will be applied in this repository.
- All 7 Dependabot PRs (#5–#11) were closed without merge as part of the archive
process — no security advisories were identified. See DECISIONS.md.

---

## Reporting

GitHub Issues are disabled on archived repositories. For issues with the
successor project, use the successor repository (link in README when available).

For issues with the spawned tool `regulasi-id-corpus-prep`, use that
repository's issue tracker directly:
https://github.com/ziffan/regulasi-id-corpus-prep/issues
69 changes: 69 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,75 @@
[![CI](https://github.com/ziffan/lexharmoni/actions/workflows/ci.yml/badge.svg)](https://github.com/ziffan/lexharmoni/actions/workflows/ci.yml)
[![Built with](https://img.shields.io/badge/Built%20with-Claude%20Opus%204.7-D97757.svg)](https://www.anthropic.com/claude)
[![Hackathon](https://img.shields.io/badge/Built%20with%20Opus%204.7-Hackathon-8B5CF6.svg)](https://cerebralvalley.ai/e/built-with-4-7-hackathon)
![Status](https://img.shields.io/badge/status-archived-lightgrey)
![Type](https://img.shields.io/badge/type-hackathon%20submission-blue)
![Version](https://img.shields.io/badge/version-v0.1.0--final-green)

---

> ## ⚠️ Repositori Diarsipkan / Repository Archived
>
> ### 🇮🇩 Indonesia
>
> Repositori ini diarsipkan pada **30 April 2026** sebagai snapshot proyek
> hackathon. LexHarmoni v0.1.0 dikembangkan untuk **Cerebral Valley × Anthropic
> "Built with Opus 4.7" Hackathon (April 2026)**.
>
> **Dua tag tersedia untuk reprodusibilitas:**
> - [`v0.1.0`](../../releases/tag/v0.1.0) — state asli submisi hackathon
> - [`v0.1.0-final`](../../releases/tag/v0.1.0-final) — state arsip dengan
> improvement post-submisi (CI, security patches, dokumentasi)
>
> **Status CI terakhir:** ✅ Green pada **2026-04-29** (lihat
> [Actions tab](../../actions))
Comment on lines +25 to +30

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The relative links for the release tags and the Actions tab are incorrect for a root-level README.md. Using ../../ will cause these links to point outside the repository's scope (resolving to the site root instead of the repository sub-pages). They should be relative to the repository root.

Suggested change
> - [`v0.1.0`](../../releases/tag/v0.1.0) — state asli submisi hackathon
> - [`v0.1.0-final`](../../releases/tag/v0.1.0-final) — state arsip dengan
> improvement post-submisi (CI, security patches, dokumentasi)
>
> **Status CI terakhir:** ✅ Green pada **2026-04-29** (lihat
> [Actions tab](../../actions))
> - [`v0.1.0`](releases/tag/v0.1.0) — state asli submisi hackathon
> - [`v0.1.0-final`](releases/tag/v0.1.0-final) — state arsip dengan
> improvement post-submisi (CI, security patches, dokumentasi)
>
> **Status CI terakhir:** ✅ Green pada **2026-04-29** (lihat
> [Actions tab](actions))

>
> **Tidak ada pengembangan lanjutan, bug fix, atau pull request yang akan
> diterima di repositori ini.** Issues boleh dibuka untuk arsip diskusi tapi
> tidak akan diresolve di sini.
>
> 🔄 **Pengembangan aktif dilanjutkan di proyek successor:** _[link akan
> ditambahkan saat repo successor diinisialisasi]_
>
> 📚 **Untuk corpus preparation Indonesian regulatory PDFs**, lihat tool
> independent yang di-spawn dari proyek ini:
> [regulasi-id-corpus-prep](https://github.com/ziffan/regulasi-id-corpus-prep)
>
> Untuk konteks keputusan arsitektur dan constraint hackathon, lihat
> [DECISIONS.md](./DECISIONS.md), [CHANGELOG.md](./CHANGELOG.md), dan
> [KNOWN_ISSUES.md](./KNOWN_ISSUES.md).
>
> ---
>
> ### 🇬🇧 English
>
> This repository was archived on **April 30, 2026** as a hackathon project
> snapshot. LexHarmoni v0.1.0 was built for the **Cerebral Valley × Anthropic
> "Built with Opus 4.7" Hackathon (April 2026)**.
>
> **Two tags are available for reproducibility:**
> - [`v0.1.0`](../../releases/tag/v0.1.0) — original hackathon submission state
> - [`v0.1.0-final`](../../releases/tag/v0.1.0-final) — archived state with
> post-submission improvements (CI, security patches, documentation)
>
> **Last CI status:** ✅ Green on **2026-04-29** (see
> [Actions tab](../../actions))
Comment on lines +56 to +61

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The relative links in the English section are also incorrect. Relative paths starting with ../../ from the root directory will not resolve correctly to the repository's releases or actions pages.

Suggested change
> - [`v0.1.0`](../../releases/tag/v0.1.0) — original hackathon submission state
> - [`v0.1.0-final`](../../releases/tag/v0.1.0-final) — archived state with
> post-submission improvements (CI, security patches, documentation)
>
> **Last CI status:** ✅ Green on **2026-04-29** (see
> [Actions tab](../../actions))
> - [`v0.1.0`](releases/tag/v0.1.0) — original hackathon submission state
> - [`v0.1.0-final`](releases/tag/v0.1.0-final) — archived state with
> post-submission improvements (CI, security patches, documentation)
>
> **Last CI status:** ✅ Green on **2026-04-29** (see
> [Actions tab](actions))

>
> **No further development, bug fixes, or pull requests will be accepted in
> this repository.** Issues may be opened for archival discussion but will
> not be resolved here.
>
> 🔄 **Active development continues in the successor project:** _[link to be
> added when successor repository is initialized]_
>
> 📚 **For Indonesian regulatory PDF corpus preparation**, see the independent
> spawned tool:
> [regulasi-id-corpus-prep](https://github.com/ziffan/regulasi-id-corpus-prep)
>
> For context on architectural decisions and hackathon constraints, see
> [DECISIONS.md](./DECISIONS.md), [CHANGELOG.md](./CHANGELOG.md), and
> [KNOWN_ISSUES.md](./KNOWN_ISSUES.md).
>
> ---

---

Expand Down
Loading