mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-02 04:43:58 +00:00
Ship OpenFleet contracts and the OpenWall draft proposal (#177)
* feat: add OpenFleet membership and CoinPay rental contracts * Propose OpenWall broadcasts and direct messaging contracts * release: prepare OpenFleet and OpenWall public contracts * fix: use tested npm for compatible CLI installs
This commit is contained in:
parent
a333726a1e
commit
45c7629953
35 changed files with 2021 additions and 12 deletions
|
|
@ -0,0 +1,30 @@
|
|||
import { describe, expect, it, vi } from "vitest";
|
||||
import { familyOfSpec } from "../src/lib/specs";
|
||||
import { listDocs, readDoc } from "../src/lib/docs";
|
||||
import { GET as llms } from "../src/app/llms.txt/route";
|
||||
import { GET as llmsFull } from "../src/app/llms-full.txt/route";
|
||||
import sitemap from "../src/app/sitemap";
|
||||
|
||||
// Spec discovery must work even when the optional blog database is offline.
|
||||
vi.mock("../src/lib/supabase", () => ({ publicClient: () => { throw new Error("offline"); } }));
|
||||
|
||||
describe.each([
|
||||
{ slug: "openfleet", name: "OpenFleet", family: "process" },
|
||||
{ slug: "openwall", name: "OpenWall", family: "people" }
|
||||
])("$name public discovery", ({ slug, name, family }) => {
|
||||
it("serves the specification through its family and docs index", () => {
|
||||
expect(familyOfSpec(slug)?.slug).toBe(family);
|
||||
expect(listDocs()).toContainEqual(expect.objectContaining({ slug, title: name }));
|
||||
expect(readDoc(slug)).toContain("0.1 draft");
|
||||
});
|
||||
|
||||
it("includes a reachable docs URL and the full contract in the LLM feeds", async () => {
|
||||
expect(await llms().text()).toMatch(new RegExp(`\\[${name}\\]\\(https://[^)]+/docs/${slug}\\)`));
|
||||
expect(await llmsFull().text()).toContain(readDoc(slug)!.trim());
|
||||
});
|
||||
|
||||
it("includes the docs route in the sitemap without a blog connection", async () => {
|
||||
const entries = await sitemap();
|
||||
expect(entries.some((entry) => new URL(entry.url).pathname === `/docs/${slug}`)).toBe(true);
|
||||
});
|
||||
});
|
||||
|
|
@ -134,7 +134,21 @@ do_install() {
|
|||
ok "downloaded${short_sha:+ ($short_sha)}"
|
||||
|
||||
info "installing dependencies (this can take a minute)…"
|
||||
( cd "$STAGE" && npm install --no-audit --no-fund --ignore-scripts ) >"$BUILD_LOG" 2>&1 \
|
||||
# Git dependency preparation can break under a newer system npm even with
|
||||
# --ignore-scripts. Use the repo's tested npm where its Node engine permits
|
||||
# it, while retaining the documented older-Node CLI installation path.
|
||||
( cd "$STAGE" &&
|
||||
npm_spec="" &&
|
||||
# Older tags predate the selector; preserve their install behavior too.
|
||||
if [ -f scripts/install-npm.cjs ]; then
|
||||
npm_spec="$(node scripts/install-npm.cjs)" || exit 1
|
||||
fi
|
||||
if [ -n "$npm_spec" ]; then
|
||||
npm exec --yes --package="$npm_spec" -- npm install --no-audit --no-fund --ignore-scripts
|
||||
else
|
||||
npm install --no-audit --no-fund --ignore-scripts
|
||||
fi
|
||||
) >"$BUILD_LOG" 2>&1 \
|
||||
|| step_fail "npm install failed"
|
||||
info "building the CLI…"
|
||||
( cd "$STAGE" && npm run build:cli ) >>"$BUILD_LOG" 2>&1 \
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ export const FAMILIES: Family[] = [
|
|||
"One Markdown file for a person or an agent, served from their own domain and linked from every platform that has a page for them. The profile carries the identity, the accounts and the topics; the sections carry what a platform needs to match on, so a job board, a booking site or a dating app reads the file instead of asking forty questions again.",
|
||||
specs: [
|
||||
s("openprofile", "OpenProfile.md", "One Markdown file for who you are and where you are, people and agents alike", { status: "0.2" }),
|
||||
s("openwall", "OpenWall", "Consent-based broadcasts and direct messages across contact networks, with an AT Protocol mapping", { landing: undefined, status: "draft" }),
|
||||
s("openresume", "OpenResume.md", "What you have done, in the same spirit, linked from the profile", { landing: undefined }),
|
||||
s("openjob", "OpenJob", "What the work is, so a candidate's agent and a job board agree", { landing: undefined }),
|
||||
s("openbroadcast", "OpenBroadcast", "The Broadcast section: the show a person hosts and who they are seeking"),
|
||||
|
|
@ -103,6 +104,7 @@ export const FAMILIES: Family[] = [
|
|||
specs: [
|
||||
s("asdlc", "ASDLC", "The Agentic Software Development Lifecycle: nine phases, four conformance levels and the ratchet rule"),
|
||||
s("openprd", "OpenPRD", "A product requirement document an agent can execute and a person can read"),
|
||||
s("openfleet", "OpenFleet", "Fleets of OpenAgent and OpenSwarm members, with metadata and rental rates through CoinPay", { landing: undefined, status: "draft" }),
|
||||
s("openswarm", "OpenSwarm", "Settlement and proof of work done under a peer-to-peer swarm"),
|
||||
s("openstream", "OpenStream", "A lossless byte-stream relay envelope, with benchmark reports per release", { landing: undefined }),
|
||||
s("openontology", "OpenOntology", "Five nouns for a shared ontology, with governance and interoperability notes"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue