No description
Find a file
Snider d5f7764329 Refactor library improvements (#18)
* refactor: Rearchitect library to use runtime and pkg modules

This commit introduces a major architectural refactoring to simplify the library's structure and improve its maintainability.

Key changes include:

- **Simplified Project Structure:** All top-level facade packages (config, crypt, display, etc.) and the root `core.go` have been removed. All library code now resides directly under the `pkg/` directory.

- **Unified Runtime:** A new `pkg/runtime` module with a `New()` constructor has been introduced. This function initializes and wires together all core services, providing a single, convenient entry point for applications.

- **Updated Entry Points:** The `cmd/core-gui` application and all examples have been updated to use the new `runtime.New()` initialization.

- **Internal Packages:** The `config` and `crypt` packages have been refactored to use an `internal` subdirectory for their implementation. This hides private details and exposes a clean, stable public API.

- **Standardized Error Handling:** A new error handling package has been added at `pkg/e`. The `workspace` and `crypt` services have been updated to use this new standard.

- **Improved Feature Flagging:** A `IsFeatureEnabled` method was added to the `config` service for more robust and centralized feature flag checks.

- **CI and Dependencies:**
  - A GitHub Actions workflow has been added for continuous integration.
  - All Go dependencies have been updated to their latest versions.

- **Documentation:** All documentation has been updated to reflect the new, simplified architecture, and obsolete files have been removed.

* refactor: Rearchitect library to use runtime and pkg modules

This commit introduces a major architectural refactoring to simplify the library's structure and improve its maintainability.

Key changes include:

- **Simplified Project Structure:** All top-level facade packages (config, crypt, display, etc.) and the root `core.go` have been removed. All library code now resides directly under the `pkg/` directory.

- **Unified Runtime:** A new `pkg/runtime` module with a `New()` constructor has been introduced. This function initializes and wires together all core services, providing a single, convenient entry point for applications. The runtime now accepts the Wails application instance, ensuring proper integration with the GUI.

- **Updated Entry Points:** The `cmd/core-gui` application and all examples have been updated to use the new `runtime.New()` constructor and correctly register the runtime as a Wails service.

- **Internal Packages:** The `config` and `crypt` packages have been refactored to use an `internal` subdirectory for their implementation. This hides private details and exposes a clean, stable public API.

- **Standardized Error Handling:** A new error handling package has been added at `pkg/e`. The `workspace` and `crypt` services have been updated to use this new standard.

- **Improved Feature Flagging:** A `IsFeatureEnabled` method was added to the `config` service for more robust and centralized feature flag checks.

- **CI and Dependencies:**
  - A GitHub Actions workflow has been added for continuous integration.
  - All Go dependencies have been updated to their latest versions.

- **Documentation:** All documentation has been updated to reflect the new, simplified architecture, and obsolete files have been removed.

* Feature tdd contract testing (#19)

* feat: Implement TDD contract testing for public API

This commit introduces a Test-Driven Development (TDD) workflow to enforce the public API contract. A new `tdd/` directory has been added to house these tests, which are intended to be the starting point for any new features or bug fixes that affect the public interface.

The "Good, Bad, Ugly" testing methodology has been adopted for these tests:
- `_Good` tests verify the "happy path" with valid inputs.
- `_Bad` tests verify predictable errors with invalid inputs.
- `_Ugly` tests verify edge cases and unexpected inputs to prevent panics.

TDD contract tests have been implemented for the `core` and `config` packages, and the `core.New` function has been hardened to prevent panics from `nil` options.

The `README.md` has been updated to document this new workflow.

* feat: Add TDD contract tests for all services

This commit expands the TDD contract testing framework to cover all services in the application. "Good, Bad, Ugly" tests have been added for the `help`, `i18n`, and `workspace` services.

To facilitate testing, the following refactors were made:
- `help`: Added a `SetDisplay` method to allow for mock injection. Hardened `Show` and `ShowAt` to prevent panics.
- `i18n`: Added a `SetBundle` method to allow for loading test-specific localization files.
- `workspace`: Made the `Config` field public and added a `SetMedium` method to allow for mock injection.

The TDD tests for the `crypt` service have been skipped due to issues with PGP key generation in the test environment.

* CLI code-docgen function (#16)

* Refactor CLI structure: move commands to 'dev' package, add docstring generation command, and update Taskfile for new tasks

Signed-off-by: Snider <snider@lt.hn>

* Add CodeRabbit PR review badge to README

Signed-off-by: Snider <snider@lt.hn>

---------

Signed-off-by: Snider <snider@lt.hn>

---------

Signed-off-by: Snider <snider@lt.hn>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Update pkg/runtime/runtime.go

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* feat: Rearchitect library and add automated documentation

This commit introduces a major architectural refactoring of the Core library and adds a new, automated documentation system.

**Architectural Changes:**

*   **Unified Runtime:** A new `pkg/runtime` module provides a single `runtime.New()` constructor that initializes and manages all core services. This simplifies application startup and improves maintainability.
*   **Wails Integration:** The `Runtime` is now correctly integrated with the Wails application lifecycle, accepting the `*application.App` instance and being registered as a Wails service.
*   **Simplified Project Structure:** All top-level facade packages have been removed, and library code is now consolidated under the `pkg/` directory.
*   **Internal Packages:** The `config` and `crypt` services now use an `internal` package to enforce a clean separation between public API and implementation details.
*   **Standardized Error Handling:** The `pkg/e` package has been introduced and integrated into the `workspace` and `crypt` services for consistent error handling.
*   **Graceful Shutdown:** The shutdown process has been fixed to ensure shutdown signals are correctly propagated to all services.

**Documentation:**

*   **Automated Doc Generation:** A new `docgen` command has been added to `cmd/core` to automatically generate Markdown documentation from the service source code.
*   **MkDocs Site:** A new MkDocs Material documentation site has been configured in the `/docs` directory.
*   **Deployment Workflow:** A new GitHub Actions workflow (`.github/workflows/docs.yml`) automatically builds and deploys the documentation site to GitHub Pages.

**Quality Improvements:**

*   **Hermetic Tests:** The config service tests have been updated to be fully hermetic, running in a temporary environment to avoid side effects.
*   **Panic Fix:** A panic in the config service's `Set` method has been fixed, and "Good, Bad, Ugly" tests have been added to verify the fix.
*   **CI/CD:** The CI workflow has been updated to use the latest GitHub Actions.
*   **Code Quality:** Numerous smaller fixes and improvements have been made based on CI feedback.

---------

Signed-off-by: Snider <snider@lt.hn>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-11-02 16:17:25 +00:00
.github/workflows Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
cmd Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
docs Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
pkg Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
.gitignore Refactor PGP module with helper functions and error handling title (#8) 2025-10-30 14:18:37 +00:00
go.mod Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
go.sum Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
go.work Refactor service documentation to standardize naming conventions and improve clarity 2025-10-28 12:06:24 +00:00
go.work.sum Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
LICENSE.txt Add initial project structure with core functionality and basic files 2025-10-24 04:55:10 +01:00
Makefile Add pre-commit task, CLI enhancements, and ATS updates 2025-10-27 05:41:11 +00:00
mkdocs.yml Refactor library improvements (#18) 2025-11-02 16:17:25 +00:00
README.md (#12) Add GitHub Actions test coverage and platform-aware Taskfiles 2025-10-30 17:37:48 +00:00
Taskfile.yml (#10) GitHub Actions workflow and refactor build and test infrastructure 2025-10-30 16:23:00 +00:00

Core

Core is a Web3 Framework, written in Go using Wails.io to replace Electron and the bloat of browsers that, at their core, still live in their mum's basement.

More to come, follow us on Discord http://discord.dappco.re

Repo: https://github.com/Snider/Core

Quick start

import core "github.com/Snider/Core"

app := core.New(
  core.WithServiceLock(),
)

Development Workflow

This project follows a Test-Driven Development (TDD) approach. We use Task for task automation to streamline the development process.

The recommended workflow is:

  1. Generate Tests: For any changes to the public API, first generate the necessary test stubs.

    task test-gen
    
  2. Run Tests (and watch them fail): Verify that the new tests fail as expected.

    task test
    
  3. Implement Your Feature: Write the code to make the tests pass.

  4. Run Tests Again: Ensure all tests now pass.

    task test
    
  5. Submit for Review: Once your changes are complete and tests are passing, submit them for a CodeRabbit review.

    task review
    

Project Structure

The project is organized into the following main directories:

  • pkg/: Contains the core Go packages that make up the framework.
  • cmd/: Contains the entry points for the two main applications:
    • core-gui/: The Wails-based GUI application.
    • core/: The command-line interface (CLI) application.

Prerequisites

Building and Running

GUI Application

To run the GUI application in development mode:

task gui:dev

To build the final application for your platform:

task gui:build

CLI Application

To build the CLI application:

task cli:build

The executable will be located in the cmd/core/bin directory.

Available Tasks

To run any of the following tasks, open your terminal in the project's root directory and execute the task command.

General Tasks

  • task test: Runs all Go tests recursively for the entire project.
  • task test-gen: Generates tests for the public API.
  • task check: A comprehensive check that runs go mod tidy, the full test suite, and a CodeRabbit review.
  • task review: Submits the current changes for a CodeRabbit review.
  • task cov: Generates a test coverage profile (coverage.txt).
  • task cov-view: Opens the HTML coverage report in your browser.
  • task sync: Updates the public API Go files to match the exported interface of the modules.

GUI Application (cmd/core-gui)

These tasks are run from the root directory and operate on the GUI application.

  • task gui:build: Builds the GUI application.
  • task gui:package: Packages a production build of the GUI application.
  • task gui:run: Runs the GUI application.
  • task gui:dev: Runs the GUI application in development mode, with hot-reloading enabled.

CLI Application (cmd/core)

These tasks are run from the root directory and operate on the CLI application.

  • task cli:build: Builds the CLI application.
  • task cli:build:dev: Builds the CLI application for development.
  • task cli:run: Builds and runs the CLI application.
  • task cli:sync: Updates the public API Go files.
  • task cli:test-gen: Generates tests for the public API.

Docs (MkDocs)

The help site and inapp docs are built with MkDocs Material and live under pkg/v1/core/docs.

  • Live preview: from pkg/v1/core/docs run
    • pip install -r requirements.txt
    • mkdocs serve -o -c (or task dev if you use Task)
  • Build static site: mkdocs build --clean -d public (or task build)

The demo app embeds the built docs from public/ and can open specific sections in new windows using stable, short headings.