Skip to content
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
22 changes: 7 additions & 15 deletions .shared-templates/docs/coverage-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,18 @@ repo's threshold, update both the CI file and this table in the same PR.**

| Repo | Threshold | Mechanism |
|---|---|---|
| `graycode` | 60% | inline `bc` check in `ci.yml` |
| `eyrie` | 60% | inline `bc` check in `ci.yml` |
| `harrier` | 49% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `shrike` | 38% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `swift` | 58% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `kestrel` | 74% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `merlin` | 76% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `sparrow` | 80% | `THRESHOLD=` in `ci.yml` (go-ci.yml.tmpl) |
| `robin` | 78% | `--cov-fail-under=` in `ci.yml` (python-ci.yml.tmpl) |
| `falcon` | none enforced | leaf library; add one before it grows past a handful of files |
| `starling` | n/a | no Go/Python test suite (skill/content registry) |
| `graycode-cli` | 65% | inline `bc` check in `ci.yml` |
| `graycode-router` | 60% | inline `bc` check in `ci.yml` |
| `graycode-skills` | n/a | no Go/Python test suite (skill/content registry) |

## Why thresholds differ per repo

These are *floors*, not targets — set near each repo's actual coverage at
the time CI was set up, then only ever raised (never silently lowered) as
the repo's test suite grows. A wide range (38% in `shrike` vs 80% in
`sparrow`) reflects real differences in how much of each repo is
exercised by unit tests vs. requiring live provider credentials
(`test-live` targets) or manual verification — it is not an oversight.
the repo's test suite grows. A range across repos reflects real differences
in how much of each repo is exercised by unit tests vs. requiring live
provider credentials (`test-live` targets) or manual verification — it is
not an oversight. Rows for removed repositories were deleted with them.

## Adding a threshold to a repo that has none

Expand Down
3 changes: 1 addition & 2 deletions .shared-templates/scripts/check-ecosystem-boundaries.sh.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ echo "ecosystem boundary guard passed"
# echo "ecosystem boundary guard passed"

# =============================================================================
# VARIANT 3 — SDK / skills consumer (sparrow, robin,
# starling). Consumers may depend on graycode's public surfaces
# VARIANT 3 — SDK / skills consumer (graycode-skills). Consumers may depend on graycode's public surfaces
# only — never on a support engine directly, and never on graycode/internal.
# =============================================================================
#
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ graycode specialist path # prints the resolved specialists

graycode ships **no bundled skills** by default. Skills are markdown instruction
files that extend agent capabilities, sourced from the separate
`GrayCodeAI/starling` repo and installed on demand:
`GrayCodeAI/graycode-skills` repo and installed on demand:

```bash
graycode skills search <query> # find skills in starling
graycode skills search <query> # find skills in graycode-skills
graycode skills install <owner/repo> [skill-name] # install after user approval
graycode skills list # list installed skills
graycode skills remove <name>
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,8 @@ three runtime layers plus optional tooling/platform services:
- **Support engines mounted by Graycode:** **eyrie**, **harrier**, **shrike**, **swift**, **kestrel**, **merlin**. Graycode imports or shells into these engines behind its own command surface.
- **Shared foundations:** **falcon**
provides shared MCP server scaffolding.
- **API consumers/extensions:** **sparrow**, **robin**, and **wren** consume
Graycode's daemon API; **starling** provides Graycode skills.
- **API consumers/extensions:** **graycode-skills** provides Graycode skills
installed on demand (`graycode skills install`).
- **Tooling/platform:** **owl** visualizes the generated ecosystem graph;
**graycode-platform** contains the optional web/BFF/Graycode Cloud plane and is
outside the Graycode Go runtime graph.
Expand Down
2 changes: 1 addition & 1 deletion cmd/chat_commands_skills.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ func (m *chatModel) handleSkillsCommand(parts []string, text string) (tea.Model,
}
b.WriteString("\nTo publish:\n")
b.WriteString(" 1. Push your skill to a GitHub repo with skills/<name>/SKILL.md\n")
b.WriteString(" 2. Submit a PR to github.com/GrayCodeAI/starling to add your repo\n")
b.WriteString(" 2. Submit a PR to github.com/GrayCodeAI/graycode-skills to add your repo\n")
b.WriteString(" 3. Or install directly: /skills install <your-org>/<your-repo>\n")
m.messages = append(m.messages, displayMsg{role: "system", content: b.String()})
return m, nil
Expand Down
33 changes: 2 additions & 31 deletions ecosystem.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,42 +28,13 @@ repositories:
workspace: true
facade: github.com/GrayCodeAI/eyrie/engine

- directory: sparrow
github_repo: sparrow
product_name: Graycode SDK for Go
kind: sdk
language: go
module: github.com/GrayCodeAI/sparrow
workspace: false

- directory: robin
github_repo: robin
product_name: Graycode SDK for Python
kind: sdk
language: python
workspace: false

- directory: wren
github_repo: wren
product_name: Graycode SDK for TypeScript
kind: sdk
language: typescript
workspace: false

- directory: starling
github_repo: starling
- directory: graycode-skills
github_repo: graycode-skills
product_name: Graycode Community Skills
kind: extension
language: python
workspace: false

- directory: owl
github_repo: owl
product_name: Ecosystem Architecture Explorer
kind: tooling
language: javascript
workspace: false

- directory: graycode-platform
github_repo: graycode-platform
product_name: GrayCode Web and Cloud
Expand Down
18 changes: 0 additions & 18 deletions internal/testaudit/package_boundaries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ func TestPackageDependencyGraph(t *testing.T) {
checkGraycodeEyrieFacade(t, root)
checkGraycodeInternalLayers(t, root)
checkSupportRepositoryBoundaries(t, root)
checkGoSDKBoundary(t, root)
}

func checkGraycodeEyrieFacade(t *testing.T, root string) {
Expand Down Expand Up @@ -128,23 +127,6 @@ func checkSupportRepositoryBoundaries(t *testing.T, root string) {
assertNoPackageViolations(t, "support repository boundaries", violations)
}

func checkGoSDKBoundary(t *testing.T, root string) {
var violations []string
for _, sdkRoot := range []string{
filepath.Join(root, "..", "sparrow"),
} {
for _, imp := range productionImports(t, root, sdkRoot) {
for _, engine := range supportEngines {
prefix := "github.com/GrayCodeAI/" + engine
if imp.path == prefix || strings.HasPrefix(imp.path, prefix+"/") {
violations = append(violations, formatImportViolation(root, imp, "SDKs must consume Graycode public surfaces"))
}
}
}
}
assertNoPackageViolations(t, "Go SDK boundary", violations)
}

func repositoryRoots(root, repo string) []string {
return []string{
filepath.Join(root, "..", repo),
Expand Down
10 changes: 0 additions & 10 deletions scripts/check-support-repo-coupling.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ for repo in "${support_repos[@]}"; do
scan_dir "${repo}" "../${repo}"
done

if [[ -d "../sparrow" ]]; then
peer_pattern="$(IFS='|'; echo "${support_repos[*]}")"
sdk_hits="$(
grep -RInE --include='*.go' "github\\.com/GrayCodeAI/(${peer_pattern})(/|\")" ../sparrow || true
)"
if [[ -n "${sdk_hits}" ]]; then
violations+="${sdk_hits}"$'\n'
fi
fi

if [[ -n "${violations}" ]]; then
echo "forbidden cross-repo peer imports found:"
echo "${violations}"
Expand Down
4 changes: 2 additions & 2 deletions scripts/ecosystem-manifest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ validate() {

done < <(records)

if ((count != 8)); then
echo "expected 8 repositories, found ${count}" >&2
if ((count != 4)); then
echo "expected 4 repositories, found ${count}" >&2
failed=1
fi
((failed == 0)) || exit 1
Expand Down
Loading