Commit graph

33 commits

Author SHA1 Message Date
Sergey
70b8203704
feat(readme): switch support link to /contacts (#270)
* feat(tool): switch create-readme support link to /contacts

* feat(scripts): warn on deprecated support link in readme check

* feat(templates): switch cookiecutter readme support links to contacts

* docs(skill): drop removed validate mode from repo-readme docs

* test(status): cover contacts link warn/fail/ok cases

* fix(ci): shorten lines to satisfy ruff

* fix(ci): apply ruff format

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-05 03:54:59 +03:00
Sergey
c0e8ec816a
refactor(scripts): unify project contract + fix no_db polarity + frontend stack detection (#267)
* refactor(scripts): add project_contract.py single source of truth

* fix(spec-status): word-boundary regex for stack matching (uv!=uvicorn)

* feat(project-status): frontend stack detection + no_db support

* fix(template): cookiecutter use_db=no writes no_db=true marker

* fix(ci): ruff SIM300/PLC0415/W292/E501 in project_contract tests

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-04 23:20:11 +03:00
Sergey
7c3ded601f
feat(template): bake shadcn-svelte + Tailwind v4 + TS into fullstack cookiecutter (#265)
* feat(template): fullstack cookiecutter — Tailwind v4 + TS + shadcn-svelte scaffold

* feat(template): fullstack — shadcn-svelte ui components + dashboard layout

* refactor(template): fullstack — remove counter/Header demo files

* feat(spec): add tailwind/shadcn/ts to STACK_REQUIRED fullstack

* test(template): update fullstack cookiecutter assertions for shadcn-svelte

* fix(ci): ruff format test_cookiecutter_templates

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-04 22:08:58 +03:00
Sergey
06899b3c01
fix(infra): fullstack api dirs include package name (#261)
* fix(infra): fullstack _api_dirs_for includes package name in path

* test(infra): fullstack thin-routes check coverage for issue #259

* fix(ci): reformat assert in test_project_status for ruff

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-04 13:55:52 +03:00
Sergey
8e00969c3e
feat(skills): code-standards architecture + tests sections, scattered-models check (#256)
* feat(skills): code-standards architecture + tests sections

* feat(infra): scattered-models AST check in project-status

* test(infra): scattered-models check tests (10 cases)

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-04 13:31:15 +03:00
Sergey
baf6b30547
fix(infra): AST route imports + check_tests structure + check_readme full port (#248)
* feat(infra): AST route imports check in project-status

* feat(infra): check_tests structure + AST stub-detector

* feat(infra): check_readme full port from validateReadme

* refactor(infra): drop validate mode from create-readme tool

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 20:50:04 +03:00
Sergey
93911f2af6
refactor(infra): eliminate globals + split check_pyproject in project-status (#247)
* refactor(infra): introduce RepoCtx, eliminate globals in project-status

* refactor(infra): split check_pyproject into 13 sub-functions

* test(infra): add RepoCtx + 13 sub-function tests, migrate cookiecutter tests

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 20:34:04 +03:00
Sergey
10df459cee
fix(infra): enforce nested src/<package>/ layout in project-status + cookiecutter (#246)
* fix(infra): nested src/<package>/ layout in project-status oracle

* fix(templates): nested packages and drop src. prefix in cookiecutter

* test(infra): cover nested src/<package>/ layout contract #241

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 20:06:36 +03:00
Sergey
596aa9b18a
fix(pipeline-status): scan all rotated memory files in check_memory (#245)
* refactor(pipeline-status): split get_memory_file_path into _resolve_memory_base + get_memory_files

* test(pipeline-status): update check_memory tests for multi-file scan

* test(pipeline-status): add rotation/mtime/glob coverage

* fix(ci): move os/time imports to top-level in test_pipeline_status

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 19:10:18 +03:00
Sergey
1e9ee49a1d
feat(infra): check_pyproject and --repo flag in project-status (#240)
* feat(infra): add check_pyproject and --repo flag to project-status

* feat(infra): add repo flag to project-status ts wrapper

* test(infra): add check_pyproject and repo flag tests

* fix(infra): accept packages=["src"] as valid hatchling wheel config

* fix(ci): apply ruff format to project-status.py and tests

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 18:36:18 +03:00
Sergey
51a5300423
feat(spec): update stack required and jwt auth template (#236)
* feat(spec): update STACK_REQUIRED for svelte and quality tools

* fix(templates): align jwt auth with issue contracts

* docs(spec): update template c stack and migration note

* fix(ci): format tests/test_spec_status.py

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 17:21:43 +03:00
Sergey
42c8e2d31e
feat(infra): project-status check oracle and ts wrapper (#233)
* feat(infra): project-status python oracle

* feat(infra): project-status ts wrapper

* feat(infra): project-status deny rules and config

* test(infra): project-status oracle and tool tests

* fix(ci): ruff format project-status.py and tests

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 15:31:42 +03:00
Sergey
cc2c896290
fix(spec): spec-status parser quotes crlf bom (#232)
* fix(spec): strip quotes crlf bom in spec-status parser

* test(spec): cover quotes crlf bom trailing newline cases

* fix(ci): format test_spec_status.py write_bytes call

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-03 15:08:50 +03:00
Sergey
37ebcd0e08
chore(cleanup): remove stale references to deprecated docs infrastructure (#212)
Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-01 04:43:10 +03:00
Sergey
b2329210d5
chore(cleanup): delete docs-reviewer infrastructure (#210)
* chore(cleanup): remove docs-reviewer agent and post-docs-review tool

* chore(cleanup): remove scaffold-handoff, adr-refs check, CI and tests

* chore(cleanup): remove docs/project-map directory

* chore(cleanup): drop docs-reviewer entry and post_docs_review keys from opencode.json

* chore(cleanup): drop docs-reviewer refs from tests, skills and shared tools comment

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-01 04:15:41 +03:00
Sergey
9dd462b764
refactor(pipeline): remove DOCS phase from pipeline-status (#208)
* test(pipeline): remove adr and project-map test files

* refactor(pipeline): remove DOCS phase from pipeline-status

* test(pipeline): update tests for 6-phase pipeline

* docs(handoff): add handoff and ADR for remove-docs-phase

* docs(handoff): set PR number

* fix(pipeline): parse PR body via json.loads in check_implement

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-01 03:48:41 +03:00
Sergey
0bf97cf1c5
fix(scripts): compute next ADR as max+1 not count+1 in scaffold (#182)
* fix(scripts): compute next ADR as max+1 not count+1 in scaffold

* docs(handoff): add handoff and ADR-079 for ADR numbering fix

* docs(handoff): set PR number

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-31 22:13:30 +03:00
Sergey
c87fcc7958
fix(scaffold-handoff): update usage comment to reflect .opencode/scripts/ path (#180)
* fix(scaffold-handoff): update usage comment to reflect .opencode/scripts/ path

* docs(handoff): add handoff and ADR-077 for scaffold-handoff usage comment fix

* docs(handoff): set PR number

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-31 21:53:53 +03:00
Sergey
27db3851b6
fix(agents): resolve prompt contradictions and path mismatches (#163)
* fix(agents): allow echo and fix paths in docs-reviewer

* fix(agents): allow echo and load memory skill in memory-syncer

* fix(agents): fix skills path and load code-standards in reviewer

* fix(pipeline): remove checkout master from template E

* fix(scripts): update scaffold path in pipeline-status error

* docs(handoff): add handoff and ADR for prompt contradictions fix

* docs(handoff): set PR number

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-31 18:47:32 +03:00
Sergey
d724e29f96
fix(pipeline-status): use statusCheckRollup instead of actions/runs CI filter (#122)
Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-29 05:29:10 +03:00
Sergey
9d654a2201
chore(memory): remove plugin + setup-memory.sh + Rust artifacts (#103)
* chore(memory): remove plugin block from opencode.json

* chore(memory): remove setup-memory.sh and memory-setup.ts

* chore(memory): remove opencode-memory from Dockerfile

* docs(memory): update AGENTS.md and SKILL.md for new tools

* test(memory): drop tests for removed setup-memory.sh and memory-setup.ts

* docs(handoff): add handoff and ADR-045 for plugin/rust removal

* docs(handoff): set PR number

* docs(project-map): update after plugin/rust removal

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-27 01:47:26 +03:00
Sergey
3aa5330003
fix(memory): setup step 5 check index.json + align docs to real state (#85)
* fix(memory): check index.json not .rag dir in setup step 5

* docs(readme): align to real state after memory PRs

* chore(env): remove dead vars from env example

* docs(handoff): add handoff + ADR-037 for memory setup step5 fix

* docs(handoff): set PR number

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 20:12:15 +03:00
Sergey
7c1fa4985e
feat(memory): wire CLI into plugin via setup-memory.sh wrapper (#77)
* feat(memory): wire setup-memory.sh to Python CLI + JS wrapper

* test(memory): add wrapper generation, idempotency, backup tests

* docs(memory): update project map for setup-memory wrapper integration

* docs(handoff): add handoff and ADR-033 for plugin wiring

* docs(handoff): set PR number

* docs(handoff): fix Pending em-dash typo in PR#77 handoff

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 17:06:45 +03:00
Sergey
f06d36140b
feat(pipeline): add check_project_map to DOCS phase (#67)
* feat(pipeline): add check_project_map to DOCS phase

* test(pipeline): add check_project_map unit tests + update check_docs tests

* docs(adr): add ADR-028 project map contract

* docs(project-map): mention check_project_map guard in Update Protocol

* docs(handoff): add PR handoff for check_project_map

* docs(handoff): set PR number 67

* docs(review): fix PR#66 to PR#67 typo in project map and handoff

* fix(ci): ruff lint errors in pipeline-status and project map test

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 00:07:13 +03:00
Sergey
e413a6c132
fix(pipeline-status): parse_remote_url breaks with git insteadOf userinfo (#55)
* fix(pipeline-status): handle git insteadOf userinfo in parse_remote_url

* test(pipeline-status): add tests for URL with userinfo

* docs(handoff): set PR number 55 in handoff + ADR-023

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 21:47:39 +03:00
Sergey
02f0863a24
fix(memory): persist git insteadOf helper for GITHUB_TOKEN in setup-memory.sh (#53)
* fix(memory): add git insteadOf helper for GITHUB_TOKEN in setup-memory.sh

* test(memory): add tests for git insteadOf helper

* docs(handoff): add handoff + ADR-022 for git insteadOf helper

* docs(handoff): set PR number 53 in handoff + ADR-022

* style: ruff format test_setup_memory.py

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 21:28:06 +03:00
Sergey
f06c9f2422
fix(config): rename CONTEX7 typo + update stale config/scripts paths (#44)
* fix(config): rename CONTEX7_API_KEY to CONTEXT7_API_KEY

* fix(permissions): update stale config/scripts paths to .opencode/scripts

* test(config): add tests for typo fix and updated paths

* docs(handoff): add handoff and ADR-018 for hotfix

* docs(handoff): set PR number

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 17:50:33 +03:00
Sergey
67174b4879
refactor(pipeline): make pipeline-status sole orchestrator + slim docs (#42)
* refactor(pipeline): add subagent_type and template to NEXT actions

NEXT_ACTIONS now explicitly specifies subagent_type + template per phase (except MERGE which calls merge_pr tool). ISSUE/IMPLEMENT -> general/A, DOCS -> docs-reviewer/B, REVIEW -> reviewer/C, MEMORY -> memory-syncer/E. Existing tests updated to new format, 25 new tests added.

* refactor(docs): slim AGENTS.md and run-pipeline skill

AGENTS.md 71 -> 31 lines: remove Commits/Pull Requests sections (formats in tools), shorten Development Workflow/Pipeline to 1-2 lines. run-pipeline SKILL.md 164 -> 155 lines: remove Phase 0 Bootstrap (duplicated phases, now in pipeline-status NEXT_ACTIONS). Keep protocol, templates, restrictions.

* chore(skills): remove commit skill (format in tool validator)

commit/SKILL.md deleted (format validated by commit.ts tool, PR#38). References updated: configure-opencode SKILL.md (2 places), add-skill SKILL.md (1 place + tree structure). project-map README: remove commit/SKILL.md from tree, add configure-opencode.

* docs(handoff): add ADR-017 and handoff for orchestration switch

PR number in handoff frontmatter is <PR-NUMBER> placeholder, will be set after gh pr create.

* docs(handoff): set PR number

Set PR number 42 in handoff frontmatter, rename handoff/ADR files from pr-41 to pr-42 (pipeline-status matches pr-{pr_number}-*.md in diff).

* docs: update project map + handoff + ADR

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 15:40:20 +03:00
Sergey
2b9ee23b49
feat(memory): add memory-setup tool with deterministic init (#36)
* feat(memory): add memory-setup tool and rewrite script

* fix(memory): correct OPENCODE_MEMORY_DIR in docker-compose

* test(memory): add setup-memory tests with mock remote

* docs(memory): add ADR and handoff

* docs(handoff): set PR number

* fix(docs): correct handoff and ADR filenames to PR number

* docs: update project map + handoff + ADR

* fix(memory): address code review comments

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 03:26:16 +03:00
Sergey
efc0827226
feat(tunnel): add cloudflare tunnel toggle tool (#34)
* feat(tunnel): add toggle tool and bash script

* feat(tunnel): add cloudflared to Dockerfile

* docs(tunnel): add ADR and handoff

* docs(handoff): set PR number

* docs: update project map + handoff + ADR

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 02:11:29 +03:00
Sergey
6911a251d3
feat: pipeline-driver rewrite + merge_pr tool (#30)
* feat(tools): add merge_pr TS tool wrapper

* refactor(run-pipeline): replace raw gh pr merge with merge_pr tool

* fix(scripts): update pipeline-status MERGE NEXT action

* docs(handoff): add pr-16 handoff + ADR-010

* fix(handoff): remove dangling ADR-012/ADR-016 references

* docs(handoff): set PR number 30

* docs(project-map): add merge-pr.ts tool (PR#30)

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 00:59:27 +03:00
Sergey
1bd541f172
refactor: commands rename /run-pipeline + /spec (#29)
* refactor: rename /pipeline-driver to /run-pipeline + /spec-driver to /spec

- Rename command + skill dir + skill() ref for both
- Update cross-references in .opencode/ .md files
- pipeline_status / spec_status tool names unchanged (independent)
- Update project-map README

* docs(handoff): add pr-14 handoff + ADR-009

* docs(handoff): set PR number 29

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-24 00:46:00 +03:00
Sergey
a8f9aa0bc6
feat: migrate .opencode/ config from opencode (#23)
* feat: migrate .opencode/ config from opencode

* refactor: rename repo refs and sanitize for public

* docs(handoff): add pr-7 handoff + ADR-002

* docs(handoff): fix PR number

* docs: update project map with .opencode/ structure

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
2026-07-23 22:57:39 +03:00