diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..056c2b1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,36 @@ +name: Bug report +description: Something behaves differently than documented +labels: ["bug"] +body: + - type: input + id: version + attributes: + label: Version / commit + description: Release tag or commit SHA where you observed this + placeholder: v1.0.0 or a short SHA + validations: + required: true + - type: textarea + id: repro + attributes: + label: Reproduction + description: Minimal steps or code that reproduce the behavior + placeholder: | + 1. … + 2. … + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected vs actual + description: What the docs/README say should happen, and what happens instead + validations: + required: true + - type: textarea + id: env + attributes: + label: Environment + description: OS, runtime version (Node/Python), anything unusual + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..ce6ea97 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Security vulnerability + url: https://github.com/577Industries/.github/blob/main/SECURITY.md + about: Please report vulnerabilities privately — see our security policy. + - name: Commercial / general inquiries + url: https://577industries.com/contact + about: FORGE OS, custom AI development, and government/SBIR work. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..23cf4fd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,24 @@ +name: Feature request +description: Propose a capability or improvement +labels: ["enhancement"] +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What can't you do today, or what costs more than it should? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed behavior + description: What you'd like to happen; API sketches welcome + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + validations: + required: false diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..71ebba5 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,85 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [info@577industries.com](mailto:info@577industries.com). All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6976ea8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing to 577 Industries + +Thanks for your interest. Everything public in this organization ships with a license, CI, and citable evidence — contributions are held to the same bar we hold ourselves to. + +## How the organization is laid out + +Work is grouped into **programs**, each marked by a `577i-program-*` topic on its repositories: + +| Program | Topic | What it is | +|---|---|---| +| HELIOS | `577i-program-helios` | Calibrated heliophysics fusion (NASA SBIR) | +| FORGE EVOLVE | `577i-program-forge-evolve` | AI-assisted legacy modernization (Navy SBIR) | +| AEGIS | `577i-program-aegis` | Secure-messaging assessment (DARPA ASEMA) | +| FORGE OS | `577i-program-forge-os` | Reusable TypeScript agent-infrastructure libraries | + +Conventions that every repo follows (topics, badges, README shape, releases) are written down in [`docs/repo-standards.md`](https://github.com/577Industries/.github/blob/main/docs/repo-standards.md). + +## Ground rules + +- **Conventional commits** — `feat:`, `fix:`, `docs:`, `test:`, `chore:`, `refactor:` (you'll see `docs(plan):`-style scopes throughout the history). +- **PRs over pushes** — branch, open a PR, let CI run. Squash-merge is the norm. +- **Tests ride along** — a behavior change without a test needs a stated reason. +- **Claims need evidence** — if a README or doc states a number, it must be reproducible from the repo or cited. This is a firm house rule. + +## Evaluation-frozen repositories + +Repositories under active government evaluation say so in their READMEs (currently the AEGIS program repos). During an evaluation window they **accept issues but not external PRs**, and their names, URLs, and descriptions are frozen. Security reports are always welcome — see [SECURITY.md](SECURITY.md). + +## Questions and contact + +- Bugs and feature requests → the repo's issue templates +- Security → [SECURITY.md](SECURITY.md) +- Everything else → [info@577industries.com](mailto:info@577industries.com) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a6d97f7 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ + + +## What + + + +## Evidence + + + +## Checklist + +- [ ] Conventional-commit title (`feat:`, `fix:`, `docs:`, …) +- [ ] Tests added/updated, or a stated reason why not +- [ ] Docs/README updated if behavior or claims changed +- [ ] No numbers stated without a reproducible source diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..2773d88 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,39 @@ +# Security Policy + +577 Industries builds systems for missions where being wrong is expensive. We treat security reports the same way we treat our own evidence: seriously, promptly, and with attribution. + +## Reporting a vulnerability + +- **Email**: [security@577industries.com](mailto:security@577industries.com) +- Or use GitHub's **Report a vulnerability** (private advisory) on the affected repository. + +Please include: the repository and commit/release affected, reproduction steps or a proof of concept, and the impact as you understand it. Encrypted mail is fine — ask us for a key in a first plaintext message if you need one. + +## Scope + +All public repositories under the [`577Industries`](https://github.com/577Industries) organization. For anything touching the commercial FORGE OS platform (577industries.com), the same address applies. + +## What to expect (coordinated disclosure) + +| Stage | Our commitment | +|---|---| +| Acknowledgement | Within **3 business days** | +| Triage + severity assessment | Within **10 business days** | +| Fix or documented mitigation | Target **90 days** from acknowledgement; we will tell you if we need longer and why | +| Credit | Public credit in the release notes / advisory unless you ask otherwise | + +We ask that you give us the 90-day window before public disclosure, and that you avoid accessing data that isn't yours, degrading service, or pivoting beyond the minimum needed to demonstrate the issue. + +## Safe harbor + +Good-faith security research conducted within this policy is authorized. We will not pursue legal action for research that respects the scope and disclosure window above. This safe harbor does not extend to social engineering, physical attacks, or testing systems we do not control. + +## Out of scope + +- Volumetric denial of service +- Findings that require a compromised developer machine or stolen credentials as a precondition +- Reports generated by automated scanners without a demonstrated impact + +## Evaluation-frozen repositories + +Some repositories are under active government evaluation (noted in their READMEs). Security reports on them are welcome and handled under this same policy — but fixes may land as advisories first, with code changes batched after the evaluation window, to preserve artifact stability. diff --git a/brand/.gitignore b/brand/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/brand/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/brand/build.mjs b/brand/build.mjs new file mode 100644 index 0000000..981bf1f --- /dev/null +++ b/brand/build.mjs @@ -0,0 +1,317 @@ +/** + * 577 Industries brand-asset pipeline. + * + * Renders the org avatar, profile banners (dark/light), standalone wordmark + * SVGs, and per-repo social-preview cards from the Steel design system + * (palette chosen 2026-04-19; type: Instrument Serif / Inter Tight / + * JetBrains Mono — all SIL OFL, vendored in ./fonts). + * + * Deterministic: same inputs → byte-identical outputs. + * + * node build.mjs # everything + * node build.mjs avatar # one target: avatar | banner | wordmark | social + * + * Signature element: the calibration tick-scale — a hairline rule with + * graduated ticks and one highlighted tolerance band. It encodes the + * company's actual discipline (calibrated uncertainty, tolerance bounds) + * and must appear on every asset. + */ +import { readFileSync, writeFileSync, mkdirSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import satori from "satori"; +import { Resvg } from "@resvg/resvg-js"; + +const ROOT = dirname(fileURLToPath(import.meta.url)); +const OUT = join(ROOT, "out"); + +/* ── Steel palette ─────────────────────────────────────────────── */ +const STEEL = { + dark: { + bg: "#06101c", + bg2: "#0c1c30", + surface: "#12233a", + rule: "#24405f", + ink: "#e8eef6", + ink2: "#9fb3cb", + signal: "#5eb5ff", + amber: "#cd9265", + }, + light: { + bg: "#f2ede1", + bg2: "#ece5d4", + surface: "#e6decb", + rule: "#c9bfa6", + ink: "#1a2433", + ink2: "#4a5a70", + signal: "#1e3a8a", + amber: "#8a5a2e", + }, +}; + +/* ── Fonts ─────────────────────────────────────────────────────── */ +const font = (file) => readFileSync(join(ROOT, "fonts", file)); +const FONTS = [ + { name: "Instrument Serif", data: font("InstrumentSerif-Regular.ttf"), weight: 400, style: "normal" }, + { name: "Instrument Serif", data: font("InstrumentSerif-Italic.ttf"), weight: 400, style: "italic" }, + { name: "Inter Tight", data: font("InterTight-Regular.ttf"), weight: 400, style: "normal" }, + { name: "Inter Tight", data: font("InterTight-Medium.ttf"), weight: 500, style: "normal" }, + { name: "Inter Tight", data: font("InterTight-SemiBold.ttf"), weight: 600, style: "normal" }, + { name: "JetBrains Mono", data: font("JetBrainsMono-Regular.ttf"), weight: 400, style: "normal" }, + { name: "JetBrains Mono", data: font("JetBrainsMono-Medium.ttf"), weight: 500, style: "normal" }, + { name: "JetBrainsMono Bold", data: font("JetBrainsMono-Bold.ttf"), weight: 700, style: "normal" }, +]; + +/* ── Element helpers (satori takes React-shaped plain objects) ─── */ +const el = (type, style, children = undefined, rest = {}) => ({ + type, + props: { style, children, ...rest }, +}); +const div = (style, children) => el("div", { display: "flex", ...style }, children); +const text = (content, style) => el("div", { display: "flex", ...style }, content); + +/* ── Signature: calibration tick-scale ───────────────────────────── + * A hairline rule with graduated ticks; one interval is highlighted + * as the "tolerance band". Heights alternate like a real scale. + * width: total px · color: tick/rule color · band: [startTick, endTick] + */ +function tickScale({ width, ticks = 21, color, bandColor, band = [12, 15], ruleOpacity = 0.55, tickH = 12, majorEvery = 5 }) { + const children = []; + const step = width / (ticks - 1); + // baseline rule + children.push(div({ position: "absolute", left: 0, top: tickH, width, height: 1.5, backgroundColor: color, opacity: ruleOpacity })); + // tolerance band segment (sits on the rule) + children.push( + div({ + position: "absolute", + left: band[0] * step, + top: tickH - 1.5, + width: (band[1] - band[0]) * step, + height: 4.5, + backgroundColor: bandColor, + borderRadius: 1, + }) + ); + for (let i = 0; i < ticks; i++) { + const major = i % majorEvery === 0; + children.push( + div({ + position: "absolute", + left: i * step - 0.75, + top: major ? 0 : tickH * 0.45, + width: 1.5, + height: major ? tickH : tickH * 0.55, + backgroundColor: color, + opacity: major ? 0.9 : 0.5, + }) + ); + } + return div({ position: "relative", width, height: tickH + 4 }, children); +} + +/* ── Render plumbing ───────────────────────────────────────────── */ +async function renderSvg(node, width, height) { + return satori(node, { width, height, fonts: FONTS }); +} +async function renderPng(node, width, height, scale = 1) { + const svg = await renderSvg(node, width, height); + const resvg = new Resvg(svg, { fitTo: { mode: "width", value: width * scale } }); + return resvg.render().asPng(); +} +const save = (rel, buf) => { + const p = join(OUT, rel); + mkdirSync(dirname(p), { recursive: true }); + writeFileSync(p, buf); + console.log("wrote", rel, `(${(buf.length / 1024).toFixed(1)} KB)`); +}; + +/* ── Avatar 512×512 — navy field, serif 577, tick-scale beneath ── */ +function avatarNode() { + const c = STEEL.dark; + return div( + { + width: 512, + height: 512, + backgroundColor: c.bg, + flexDirection: "column", + alignItems: "center", + justifyContent: "center", + }, + [ + text("577", { + fontFamily: "Instrument Serif", + fontSize: 252, + color: STEEL.light.bg, // cream digits — ties dark and light worlds + lineHeight: 1, + marginTop: -20, + }), + div({ marginTop: 34 }, [ + tickScale({ width: 300, ticks: 11, majorEvery: 5, color: c.ink2, bandColor: c.signal, band: [6, 8], tickH: 22 }), + ]), + ] + ); +} + +/* ── Wordmark — 577 ‖ INDUSTRIES with tick-scale under the digits ─ */ +function wordmarkNode(theme, { w = 1040, h = 220 } = {}) { + const c = STEEL[theme]; + return div( + { width: w, height: h, alignItems: "flex-start", justifyContent: "flex-start", backgroundColor: "transparent" }, + [ + div({ flexDirection: "column", marginLeft: 8 }, [ + text("577", { fontFamily: "Instrument Serif", fontSize: 148, color: c.ink, lineHeight: 1, letterSpacing: -2 }), + div({ marginTop: 12 }, [ + tickScale({ width: 252, ticks: 11, majorEvery: 5, color: c.ink2, bandColor: c.signal, band: [6, 8], tickH: 14 }), + ]), + ]), + div({ width: 2, height: 150, backgroundColor: c.rule, marginLeft: 44, marginTop: 10 }), + div({ flexDirection: "column", marginLeft: 44, marginTop: 22 }, [ + text("INDUSTRIES", { fontFamily: "JetBrains Mono", fontWeight: 500, fontSize: 58, letterSpacing: 22, color: c.ink }), + text("CALIBRATED SYSTEMS · DUAL-USE R&D", { + fontFamily: "JetBrains Mono", + fontSize: 21, + letterSpacing: 6.5, + color: c.ink2, + marginTop: 26, + }), + ]), + ] + ); +} + +/* ── Banner 1600×400 ───────────────────────────────────────────── */ +function bannerNode(theme) { + const c = STEEL[theme]; + const gradient = + theme === "dark" + ? { backgroundImage: `linear-gradient(105deg, ${c.bg} 0%, ${c.bg} 55%, ${c.bg2} 100%)` } + : { backgroundColor: c.bg }; + return div( + { width: 1600, height: 400, flexDirection: "column", position: "relative", ...gradient }, + [ + // hairline frame rules + div({ position: "absolute", left: 0, top: 0, width: 1600, height: 2, backgroundColor: c.rule }), + div({ position: "absolute", left: 0, top: 398, width: 1600, height: 2, backgroundColor: c.rule }), + // right-side extended calibration scale, quiet + div({ position: "absolute", right: 72, top: 182 }, [ + tickScale({ width: 420, ticks: 21, majorEvery: 5, color: c.ink2, bandColor: c.signal, band: [13, 16], tickH: 16 }), + ]), + text("§ 577INDUSTRIES.COM", { + position: "absolute", + right: 72, + top: 220, + fontFamily: "JetBrains Mono", + fontSize: 17, + letterSpacing: 5, + color: c.ink2, + }), + // main block + div({ flexDirection: "column", marginLeft: 72, marginTop: 64 }, [ + text("AI SYSTEMS INTEGRATOR · COLUMBUS, OHIO", { + fontFamily: "JetBrains Mono", + fontSize: 19, + letterSpacing: 6, + color: c.signal, + }), + div({ alignItems: "baseline", marginTop: 18 }, [ + text("577", { fontFamily: "Instrument Serif", fontSize: 128, color: c.ink, lineHeight: 1, letterSpacing: -2 }), + text("Industries", { + fontFamily: "Instrument Serif", + fontStyle: "italic", + fontSize: 104, + color: c.ink, + lineHeight: 1, + marginLeft: 30, + }), + ]), + text("Engineering for missions where failure is not an option.", { + fontFamily: "Inter Tight", + fontWeight: 500, + fontSize: 34, + color: c.ink2, + marginTop: 22, + }), + ]), + ] + ); +} + +/* ── Social preview 1280×640 (per repo) ────────────────────────── */ +function socialNode({ repo, program, blurb }) { + const c = STEEL.dark; + return div( + { width: 1280, height: 640, flexDirection: "column", position: "relative", backgroundColor: c.bg }, + [ + div({ position: "absolute", left: 0, top: 0, width: 1280, height: 3, backgroundColor: c.signal, opacity: 0.9 }), + div({ flexDirection: "column", marginLeft: 84, marginTop: 84, width: 1100 }, [ + text(`577i · ${program.toUpperCase()}`, { + fontFamily: "JetBrains Mono", + fontSize: 24, + letterSpacing: 7, + color: c.signal, + }), + text(repo, { + fontFamily: "JetBrains Mono", + fontWeight: 500, + fontSize: repo.length > 26 ? 62 : 76, + color: c.ink, + marginTop: 30, + letterSpacing: -1, + }), + text(blurb, { + fontFamily: "Inter Tight", + fontSize: 33, + color: c.ink2, + marginTop: 26, + lineHeight: 1.35, + maxWidth: 1080, + }), + ]), + // footer: tick-scale + wordmark line + div({ position: "absolute", left: 84, top: 528 }, [ + tickScale({ width: 300, ticks: 11, majorEvery: 5, color: c.ink2, bandColor: c.signal, band: [6, 8], tickH: 14 }), + ]), + div({ position: "absolute", right: 84, top: 520, alignItems: "baseline" }, [ + text("577", { fontFamily: "Instrument Serif", fontSize: 46, color: c.ink }), + text("INDUSTRIES", { fontFamily: "JetBrains Mono", fontSize: 22, letterSpacing: 7, color: c.ink, marginLeft: 14 }), + text("· 577industries.com", { fontFamily: "Inter Tight", fontSize: 22, color: c.ink2, marginLeft: 14 }), + ]), + ] + ); +} + +/* ── Repo manifest for social cards ────────────────────────────── */ +const REPOS = JSON.parse(readFileSync(join(ROOT, "repos.json"), "utf8")); + +/* ── Targets ───────────────────────────────────────────────────── */ +const targets = { + async avatar() { + save("avatar.png", await renderPng(avatarNode(), 512, 512)); + save("preview/avatar-32.png", await renderPng(avatarNode(), 512, 512, 32 / 512)); + save("preview/avatar-20.png", await renderPng(avatarNode(), 512, 512, 20 / 512)); + }, + async banner() { + save("banner-dark.png", await renderPng(bannerNode("dark"), 1600, 400)); + save("banner-light.png", await renderPng(bannerNode("light"), 1600, 400)); + }, + async wordmark() { + save("wordmark-dark.svg", Buffer.from(await renderSvg(wordmarkNode("dark"), 1040, 220))); + save("wordmark-light.svg", Buffer.from(await renderSvg(wordmarkNode("light"), 1040, 220))); + save("preview/wordmark-dark.png", await renderPng(wordmarkNode("dark"), 1040, 220)); + save("preview/wordmark-light.png", await renderPng(wordmarkNode("light"), 1040, 220)); + }, + async social() { + for (const r of REPOS) save(`social/${r.repo}.png`, await renderPng(socialNode(r), 1280, 640)); + }, +}; + +const pick = process.argv[2]; +const run = pick ? { [pick]: targets[pick] } : targets; +if (pick && !targets[pick]) { + console.error(`unknown target "${pick}" — use: ${Object.keys(targets).join(" | ")}`); + process.exit(1); +} +for (const [name, fn] of Object.entries(run)) { + console.log(`── ${name}`); + await fn(); +} diff --git a/brand/fonts/InstrumentSerif-Italic.ttf b/brand/fonts/InstrumentSerif-Italic.ttf new file mode 100644 index 0000000..192c3ed Binary files /dev/null and b/brand/fonts/InstrumentSerif-Italic.ttf differ diff --git a/brand/fonts/InstrumentSerif-Regular.ttf b/brand/fonts/InstrumentSerif-Regular.ttf new file mode 100644 index 0000000..36fac00 Binary files /dev/null and b/brand/fonts/InstrumentSerif-Regular.ttf differ diff --git a/brand/fonts/InterTight-Medium.ttf b/brand/fonts/InterTight-Medium.ttf new file mode 100644 index 0000000..36636d4 Binary files /dev/null and b/brand/fonts/InterTight-Medium.ttf differ diff --git a/brand/fonts/InterTight-Regular.ttf b/brand/fonts/InterTight-Regular.ttf new file mode 100644 index 0000000..3f2355c Binary files /dev/null and b/brand/fonts/InterTight-Regular.ttf differ diff --git a/brand/fonts/InterTight-SemiBold.ttf b/brand/fonts/InterTight-SemiBold.ttf new file mode 100644 index 0000000..53f3a15 Binary files /dev/null and b/brand/fonts/InterTight-SemiBold.ttf differ diff --git a/brand/fonts/JetBrainsMono-Bold.ttf b/brand/fonts/JetBrainsMono-Bold.ttf new file mode 100644 index 0000000..db77e78 Binary files /dev/null and b/brand/fonts/JetBrainsMono-Bold.ttf differ diff --git a/brand/fonts/JetBrainsMono-Medium.ttf b/brand/fonts/JetBrainsMono-Medium.ttf new file mode 100644 index 0000000..62386fc Binary files /dev/null and b/brand/fonts/JetBrainsMono-Medium.ttf differ diff --git a/brand/fonts/JetBrainsMono-Regular.ttf b/brand/fonts/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000..91ef61e Binary files /dev/null and b/brand/fonts/JetBrainsMono-Regular.ttf differ diff --git a/brand/fonts/OFL-InstrumentSerif.txt b/brand/fonts/OFL-InstrumentSerif.txt new file mode 100644 index 0000000..669ce79 --- /dev/null +++ b/brand/fonts/OFL-InstrumentSerif.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Instrument Serif Project Authors (https://github.com/Instrument/instrument-serif) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/brand/fonts/OFL-InterTight.txt b/brand/fonts/OFL-InterTight.txt new file mode 100644 index 0000000..18d0da5 --- /dev/null +++ b/brand/fonts/OFL-InterTight.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Inter Project Authors (https://github.com/rsms/inter-tight) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/brand/fonts/OFL-JetBrainsMono.txt b/brand/fonts/OFL-JetBrainsMono.txt new file mode 100644 index 0000000..821a3da --- /dev/null +++ b/brand/fonts/OFL-JetBrainsMono.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/brand/fonts/README.md b/brand/fonts/README.md new file mode 100644 index 0000000..e56dbac --- /dev/null +++ b/brand/fonts/README.md @@ -0,0 +1,12 @@ +# Vendored fonts (SIL OFL 1.1) + +Static instances used by `../build.mjs` (satori requires static weights). +Sources: [google/fonts](https://github.com/google/fonts) — OFL license texts alongside. + +Regenerate statics from the upstream variable fonts with: + +```bash +pip install fonttools +fonttools varLib.instancer "InterTight[wght].ttf" wght=400 # etc. for 500/600 +fonttools varLib.instancer "JetBrainsMono[wght].ttf" wght=400 # etc. for 500/700 +``` diff --git a/brand/out/avatar.png b/brand/out/avatar.png new file mode 100644 index 0000000..bf2f114 Binary files /dev/null and b/brand/out/avatar.png differ diff --git a/brand/out/banner-dark.png b/brand/out/banner-dark.png new file mode 100644 index 0000000..b705b1f Binary files /dev/null and b/brand/out/banner-dark.png differ diff --git a/brand/out/banner-light.png b/brand/out/banner-light.png new file mode 100644 index 0000000..299956e Binary files /dev/null and b/brand/out/banner-light.png differ diff --git a/brand/out/preview/avatar-20.png b/brand/out/preview/avatar-20.png new file mode 100644 index 0000000..d8413e0 Binary files /dev/null and b/brand/out/preview/avatar-20.png differ diff --git a/brand/out/preview/avatar-32.png b/brand/out/preview/avatar-32.png new file mode 100644 index 0000000..84d56b6 Binary files /dev/null and b/brand/out/preview/avatar-32.png differ diff --git a/brand/out/preview/wordmark-dark.png b/brand/out/preview/wordmark-dark.png new file mode 100644 index 0000000..7fba772 Binary files /dev/null and b/brand/out/preview/wordmark-dark.png differ diff --git a/brand/out/preview/wordmark-light.png b/brand/out/preview/wordmark-light.png new file mode 100644 index 0000000..f6646fc Binary files /dev/null and b/brand/out/preview/wordmark-light.png differ diff --git a/brand/out/social/aegisgraph.png b/brand/out/social/aegisgraph.png new file mode 100644 index 0000000..b3601a1 Binary files /dev/null and b/brand/out/social/aegisgraph.png differ diff --git a/brand/out/social/forge-agent-memory.png b/brand/out/social/forge-agent-memory.png new file mode 100644 index 0000000..9a5de01 Binary files /dev/null and b/brand/out/social/forge-agent-memory.png differ diff --git a/brand/out/social/forge-evolve-tmpc.png b/brand/out/social/forge-evolve-tmpc.png new file mode 100644 index 0000000..b76568d Binary files /dev/null and b/brand/out/social/forge-evolve-tmpc.png differ diff --git a/brand/out/social/forge-hashchain-audit.png b/brand/out/social/forge-hashchain-audit.png new file mode 100644 index 0000000..8a4449d Binary files /dev/null and b/brand/out/social/forge-hashchain-audit.png differ diff --git a/brand/out/social/forge-model-router.png b/brand/out/social/forge-model-router.png new file mode 100644 index 0000000..23e972a Binary files /dev/null and b/brand/out/social/forge-model-router.png differ diff --git a/brand/out/social/forge-tool-guardrails.png b/brand/out/social/forge-tool-guardrails.png new file mode 100644 index 0000000..af7227c Binary files /dev/null and b/brand/out/social/forge-tool-guardrails.png differ diff --git a/brand/out/social/forge-workflow-dag.png b/brand/out/social/forge-workflow-dag.png new file mode 100644 index 0000000..d480e74 Binary files /dev/null and b/brand/out/social/forge-workflow-dag.png differ diff --git a/brand/out/social/gannon-storm-rtk-analysis.png b/brand/out/social/gannon-storm-rtk-analysis.png new file mode 100644 index 0000000..47481ff Binary files /dev/null and b/brand/out/social/gannon-storm-rtk-analysis.png differ diff --git a/brand/out/social/helios-fusion-engine.png b/brand/out/social/helios-fusion-engine.png new file mode 100644 index 0000000..28149df Binary files /dev/null and b/brand/out/social/helios-fusion-engine.png differ diff --git a/brand/out/social/helios-program.png b/brand/out/social/helios-program.png new file mode 100644 index 0000000..3f4c2b8 Binary files /dev/null and b/brand/out/social/helios-program.png differ diff --git a/brand/out/social/helios-provenance-spec.png b/brand/out/social/helios-provenance-spec.png new file mode 100644 index 0000000..ebbaeae Binary files /dev/null and b/brand/out/social/helios-provenance-spec.png differ diff --git a/brand/out/social/helios-spaceweather-connectors.png b/brand/out/social/helios-spaceweather-connectors.png new file mode 100644 index 0000000..e36450d Binary files /dev/null and b/brand/out/social/helios-spaceweather-connectors.png differ diff --git a/brand/out/wordmark-dark.svg b/brand/out/wordmark-dark.svg new file mode 100644 index 0000000..5397cbb --- /dev/null +++ b/brand/out/wordmark-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/brand/out/wordmark-light.svg b/brand/out/wordmark-light.svg new file mode 100644 index 0000000..96a7afc --- /dev/null +++ b/brand/out/wordmark-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/brand/package-lock.json b/brand/package-lock.json new file mode 100644 index 0000000..42acf2b --- /dev/null +++ b/brand/package-lock.json @@ -0,0 +1,428 @@ +{ + "name": "brand", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "brand", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@resvg/resvg-js": "^2.6.2", + "satori": "^0.26.0" + } + }, + "node_modules/@resvg/resvg-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", + "license": "MPL-2.0", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@resvg/resvg-js-android-arm-eabi": "2.6.2", + "@resvg/resvg-js-android-arm64": "2.6.2", + "@resvg/resvg-js-darwin-arm64": "2.6.2", + "@resvg/resvg-js-darwin-x64": "2.6.2", + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", + "@resvg/resvg-js-linux-arm64-musl": "2.6.2", + "@resvg/resvg-js-linux-x64-gnu": "2.6.2", + "@resvg/resvg-js-linux-x64-musl": "2.6.2", + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", + "@resvg/resvg-js-win32-x64-msvc": "2.6.2" + } + }, + "node_modules/@resvg/resvg-js-android-arm-eabi": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz", + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-android-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz", + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz", + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-x64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz", + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz", + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz", + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz", + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz", + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz", + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz", + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz", + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==", + "cpu": [ + "ia32" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-x64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz", + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@shuding/opentype.js": { + "version": "1.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", + "license": "MIT", + "dependencies": { + "fflate": "^0.7.3", + "string.prototype.codepointat": "^0.2.1" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/css-background-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==", + "license": "MIT" + }, + "node_modules/css-box-shadow": { + "version": "1.0.0-3", + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==", + "license": "MIT" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-gradient-parser": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.17.tgz", + "integrity": "sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/emoji-regex-xs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", + "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", + "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==", + "license": "MIT" + }, + "node_modules/hex-rgb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "license": "MIT", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parse-css-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/satori": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.26.0.tgz", + "integrity": "sha512-tkMFrfIs3l2mQ2JEcyW0ADTy3zGggFRFzi6Ef8YozQSFsFKEqaSO1Y8F9wJg4//PJGQauMalHGTUEkPrFwhVPA==", + "license": "MPL-2.0", + "dependencies": { + "@shuding/opentype.js": "1.4.0-beta.0", + "css-background-parser": "^0.1.0", + "css-box-shadow": "1.0.0-3", + "css-gradient-parser": "^0.0.17", + "css-to-react-native": "^3.0.0", + "emoji-regex-xs": "^2.0.1", + "escape-html": "^1.0.3", + "linebreak": "^1.1.0", + "parse-css-color": "^0.2.1", + "postcss-value-parser": "^4.2.0", + "yoga-layout": "^3.2.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "license": "MIT" + } + } +} diff --git a/brand/package.json b/brand/package.json new file mode 100644 index 0000000..c8af4fc --- /dev/null +++ b/brand/package.json @@ -0,0 +1,16 @@ +{ + "name": "brand", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@resvg/resvg-js": "^2.6.2", + "satori": "^0.26.0" + } +} diff --git a/brand/repos.json b/brand/repos.json new file mode 100644 index 0000000..22aa6dc --- /dev/null +++ b/brand/repos.json @@ -0,0 +1,62 @@ +[ + { + "repo": "aegisgraph", + "program": "AEGIS", + "blurb": "AegisGraph: graph-based application-layer assessment evidence platform for Secure Messaging Applications (SMAs)." + }, + { + "repo": "forge-agent-memory", + "program": "FORGE OS", + "blurb": "Bio-inspired memory for AI agents with logarithmic reinforcement, exponential decay, and composite recall scoring" + }, + { + "repo": "forge-evolve-tmpc", + "program": "FORGE EVOLVE", + "blurb": "AI-assisted modernization of C#/.NET mission-planning software with behavioral-equivalence proof and continuous-ATO artifacts." + }, + { + "repo": "forge-hashchain-audit", + "program": "FORGE OS", + "blurb": "Tamper-evident audit trail with SHA-256 hash chaining, Ed25519 signatures, and Merkle tree anchoring" + }, + { + "repo": "forge-model-router", + "program": "FORGE OS", + "blurb": "Multi-provider AI model router with 6 routing strategies, sovereign profile support, and cost ceiling enforcement" + }, + { + "repo": "forge-tool-guardrails", + "program": "FORGE OS", + "blurb": "4-level guardrail middleware (none/log/pause/block) for AI agent tools with human-in-the-loop approval workflow" + }, + { + "repo": "forge-workflow-dag", + "program": "FORGE OS", + "blurb": "YAML-to-DAG workflow compiler with Kahn's topological sort, cycle detection, and parallel group identification" + }, + { + "repo": "gannon-storm-rtk-analysis", + "program": "HELIOS", + "blurb": "Retrospective RTK-GNSS positioning error analysis during the May 10-12, 2024 Gannon G5 superstorm." + }, + { + "repo": "helios-fusion-engine", + "program": "HELIOS", + "blurb": "Model-agnostic probabilistic fusion of heterogeneous space-weather model outputs." + }, + { + "repo": "helios-program", + "program": "HELIOS", + "blurb": "HELIOS program meta-repo: public proposal companion, master plan, orchestration scripts, per-artifact design specs" + }, + { + "repo": "helios-provenance-spec", + "program": "HELIOS", + "blurb": "JSON Schema (draft 2020-12) for feature-level provenance in heliophysics fusion systems, with pydantic v2 reference implementation." + }, + { + "repo": "helios-spaceweather-connectors", + "program": "HELIOS", + "blurb": "Production-grade Python adapters for NASA DONKI, CCMC SEP Scoreboards, NOAA SWPC, CDDIS GIMs, GOES, and DSCOVR \u2014 normalized to\u2026" + } +] \ No newline at end of file diff --git a/docs/repo-standards.md b/docs/repo-standards.md new file mode 100644 index 0000000..65baae6 --- /dev/null +++ b/docs/repo-standards.md @@ -0,0 +1,73 @@ +# 577 Industries — Repository Standards + +The contract every public repository in the `577Industries` org follows. The org profile, the social-preview cards, and the live `/open-source` index on [577industries.com](https://577industries.com/open-source) are all generated from the metadata this document standardizes — **a repo that follows this doc appears on the website automatically; one that doesn't falls into the "Incubating" bucket.** + +## 1. Topics (the machine-readable contract) + +GitHub rules: lowercase letters/numbers/hyphens, ≤50 chars per topic, ≤20 topics per repo. + +Every public repo carries: + +1. **Org marker**: `577-industries` +2. **Exactly one program topic** — this is the website's grouping key: + - `577i-program-helios` + - `577i-program-forge-os` + - `577i-program-forge-evolve` + - `577i-program-aegis` +3. Domain topics as appropriate (e.g. `space-weather`, `typescript`, `provenance`) — aim for 5–10 total. + +New program? Coin `577i-program-` here first, then tag repos. The website picks up new program groups without a code change only when repos are tagged consistently. + +## 2. Description and homepage + +- **Description**: one dense sentence, capabilities-first, no marketing adjectives. It doubles as the social-card blurb and the website's repo-card copy — the first sentence must stand alone. +- **Homepage** (`gh repo edit --homepage`): + - Repo has a GitHub Pages companion site → that Pages URL. + - FORGE OS libraries → `https://577industries.com/open-source#forge-os`. + - Otherwise → the most useful docs URL, never blank. + +## 3. README header (uniform across all repos) + +```markdown + + + 577 Industries + + +# + +`` · [program overview](https://github.com/577Industries#) + +**** + + +``` + +**Badge discipline**: shields.io `flat-square` style only, ≤5 badges, in this order: CI · release · license · npm (if published) · docs/Pages (if live). No dynamic star/download-count badges (they read as noise at our scale). + +## 4. License + +- Default: **Apache-2.0** with `LICENSE` at the repo root. +- Proprietary/internal repos are private and marked `Other`/none — never public without a license. +- Docs-only content may add `LICENSE-DOCS` (CC-BY-4.0) alongside. + +## 5. Releases + +- Tag `vX.Y.Z` (SemVer) — every public library repo has **at least one tagged release**; a repo without a release reads as abandoned. +- `gh release create vX.Y.Z --generate-notes`, then edit the notes to lead with what changed for users. +- npm-published libraries: the git tag matches the published `package.json` version. + +## 6. Social preview + +Generated by `brand/build.mjs` (`node build.mjs social`) into `brand/out/social/.png` — regenerate after description changes, upload via **Settings → General → Social preview** (UI-only; 1280×640). + +## 7. Community health + +`SECURITY.md`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, issue/PR templates cascade org-wide from this `.github` repo. Only add a repo-local copy to *override* the org default, which should be rare and justified in the file itself. + +## 8. Hard rules (never do these) + +- **Never recreate `asema-feasibility-artifacts` under the `577-Industries` personal account.** The repo was transferred to the org 2026-07-07; GitHub's permanent redirect (which DARPA-cited URLs depend on) survives only while that name stays unclaimed on the old owner. The same applies to any transferred repo name: old-owner names are reserved-forever. +- **Never rename, re-describe, or take private a repo during a government evaluation window.** Currently frozen: `aegisgraph` (+ `asema-feasibility-artifacts` content) until the DARPA ASEMA evaluation closes. +- **Never state a number in a README that isn't reproducible from the repo or cited.** (House rule; also enforced on the website by `audit:truthfulness`.) +- **Never create company repos under the personal account** — always `577Industries`. diff --git a/profile/README.md b/profile/README.md index 8f8e919..f23dd62 100644 --- a/profile/README.md +++ b/profile/README.md @@ -1,17 +1,18 @@
-# 577 Industries + + + 577 Industries — Engineering for missions where failure is not an option. + -### Engineering for missions where failure is not an option. +

-Columbus, Ohio · Dual-use commercial & defense +[![Website](https://img.shields.io/badge/577industries.com-visit-5eb5ff?style=flat-square)](https://577industries.com) +[![License: Apache 2.0](https://img.shields.io/badge/license-Apache_2.0-blue?style=flat-square)](https://www.apache.org/licenses/LICENSE-2.0) +[![Patents](https://img.shields.io/badge/patents-5_described-7c3aed?style=flat-square)](#forge-os--agent-infrastructure) +[![npm](https://img.shields.io/badge/npm-@577--industries-cb3837?style=flat-square)](https://www.npmjs.com/search?q=%40577-industries) -[![License: Apache 2.0](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![NASA SBIR](https://img.shields.io/badge/NASA_SBIR-under_evaluation-0b3d91)](#helios--calibrated-heliophysics-fusion) -[![Navy SBIR](https://img.shields.io/badge/Navy_SBIR-DON26BZ01--NV013-1c3d6e)](#forge-evolve-for-tmpc--ai-assisted-modernization-of-mission-planning-software) -[![DARPA](https://img.shields.io/badge/DARPA_ASEMA-under_evaluation-555)](#darpa-asema--secure-messaging-assessment-aegis) -[![Patents](https://img.shields.io/badge/patents-5_described-7c3aed)](#forge-os--agent-infrastructure) -[![npm](https://img.shields.io/badge/npm-@577--industries-cb3837)](https://www.npmjs.com/search?q=%40577-industries) +Columbus, Ohio · Dual-use commercial & defense
@@ -26,11 +27,26 @@ Columbus, Ohio · Dual-use commercial & defense Every public artifact ships with a license, a CI badge, and citable evidence. Every internal artifact is gated by a documented IP boundary. Programs land in this org iteratively as they ship; the active set is below. +```mermaid +%%{init: {'theme':'neutral'}}%% +flowchart LR + ORG(["577 Industries"]):::org + ORG --- HELIOS["☀ HELIOS
calibrated space-weather fusion"] + ORG --- EVOLVE["⚙ FORGE EVOLVE
verified legacy modernization"] + ORG --- AEGIS["🛡 AEGIS
secure-messaging assessment"] + ORG --- FOS["⛭ FORGE OS
agent infrastructure libraries"] + HELIOS --- hp["helios-program
+ 4 artifact repos"] + EVOLVE --- fe["forge-evolve-tmpc"] + AEGIS --- ag["aegisgraph · asema-feasibility-artifacts"] + FOS --- fl["forge-agent-memory · model-router
tool-guardrails · workflow-dag · hashchain-audit"] + classDef org font-weight:bold +``` + --- ## HELIOS — Calibrated Heliophysics Fusion -![status](https://img.shields.io/badge/NASA_SBIR_Phase_I-under_evaluation-0b3d91) ![phase-ii](https://img.shields.io/badge/Phase_II-evidence_in_assembly-009688) +![status](https://img.shields.io/badge/NASA_SBIR_Phase_I-under_evaluation-0b3d91?style=flat-square) ![phase-ii](https://img.shields.io/badge/Phase_II-evidence_in_assembly-009688?style=flat-square) Multi-source space-weather fusion with feature-level provenance and calibrated uncertainty. Two vertical slices: NASA SRAG mission-operations radiation risk and U.S. precision-agriculture GNSS reliability. NASA SBIR subtopic **SPWX.1.S26A**, submitted 2026-05-18, currently under NASA evaluation. @@ -51,7 +67,7 @@ Multi-source space-weather fusion with feature-level provenance and calibrated u ## FORGE EVOLVE for TMPC — AI-assisted modernization of mission-planning software -![status](https://img.shields.io/badge/Navy_SBIR_Phase_I-DON26BZ01--NV013-1c3d6e) [![demo-offline](https://github.com/577Industries/forge-evolve-tmpc/actions/workflows/demo-offline.yml/badge.svg)](https://github.com/577Industries/forge-evolve-tmpc/actions/workflows/demo-offline.yml) +![status](https://img.shields.io/badge/Navy_SBIR_Phase_I-DON26BZ01--NV013-1c3d6e?style=flat-square) [![demo-offline](https://img.shields.io/github/actions/workflow/status/577Industries/forge-evolve-tmpc/demo-offline.yml?style=flat-square&label=demo-offline)](https://github.com/577Industries/forge-evolve-tmpc/actions/workflows/demo-offline.yml) Behavioral-equivalence-verified AI modernization of legacy C#/.NET mission-planning software, with continuous-ATO evidence generated as a byproduct. Targets the U.S. Navy Theater Mission Planning Center (TMPC, NAVAIR PMA-281), topic **DON26BZ01-NV013** (26.B Release 1); response in preparation. This is the C#/.NET extension of 577's FORGE EVOLVE modernization framework, reproducible offline by reviewers with no API keys. @@ -70,23 +86,23 @@ Consumes [`forge-model-router`](https://github.com/577Industries/forge-model-rou ## DARPA ASEMA — Secure Messaging Assessment (AEGIS) -![contract](https://img.shields.io/badge/contract-HR0011SB20254--12-grey) ![status](https://img.shields.io/badge/Tier_3-under_evaluation-555) +![contract](https://img.shields.io/badge/contract-HR0011SB20254--12-grey?style=flat-square) ![status](https://img.shields.io/badge/Tier_3-under_evaluation-555?style=flat-square) Graph-based application-layer evidence platform for assessing Secure Messaging Applications (project codename **AEGIS**). DARPA contract HR0011SB20254-12, Tier 3 research, currently under active DARPA evaluation. > [!IMPORTANT] -> Program materials and evaluation evidence are intentionally limited during the evaluation window. Additional artifacts will consolidate into the `577Industries` org post-evaluation. +> Program materials and evaluation evidence are intentionally limited during the evaluation window. `aegisgraph`'s name, URL, and description are frozen until the evaluation closes. | Repository | Status | |---|---| | [`aegisgraph`](https://github.com/577Industries/aegisgraph) | Feasibility artifact · URL frozen during evaluation | -| [`577-Industries/asema-feasibility-artifacts`](https://github.com/577-Industries/asema-feasibility-artifacts) | Founder-account feasibility artifacts · transitional | +| [`asema-feasibility-artifacts`](https://github.com/577Industries/asema-feasibility-artifacts) | Sanitized reproducibility artifacts · consolidated into the org 2026-07 with permanent redirects from the founder-account URLs | --- ## FORGE OS — Agent Infrastructure -![license](https://img.shields.io/badge/license-Apache_2.0-blue) ![patents](https://img.shields.io/badge/patents-5_described-7c3aed) ![npm](https://img.shields.io/badge/npm-@577--industries-cb3837) +![license](https://img.shields.io/badge/license-Apache_2.0-blue?style=flat-square) ![patents](https://img.shields.io/badge/patents-5_described-7c3aed?style=flat-square) ![npm](https://img.shields.io/badge/npm-@577--industries-cb3837?style=flat-square) Reusable TypeScript libraries for production AI-agent applications. Each library implements an algorithm described in a 2025–2026 patent filing. @@ -106,6 +122,7 @@ Reusable TypeScript libraries for production AI-agent applications. Each library | Date | Update | |---|---| +| **2026-07-07** | GitHub presence consolidated: ASEMA artifacts transferred into the org (redirects preserved), org-wide brand system + repo standards shipped, `v1.0.0` releases tagged across the FORGE OS libraries | | **2026-06-01** | FORGE EVOLVE for TMPC reference implementation published · Navy SBIR DON26BZ01-NV013 · `make demo` reproducible offline · CI green on Linux + Windows | | **2026-05-18** | HELIOS NASA SBIR Phase I proposal submitted · now under NASA evaluation · Phase II evidence in assembly | | **2026-03** | `forge-workflow-dag` and `forge-hashchain-audit` patents described | @@ -116,7 +133,7 @@ Reusable TypeScript libraries for production AI-agent applications. Each library
-**Contact** · [info@577industries.com](mailto:info@577industries.com) +**Contact** · [info@577industries.com](mailto:info@577industries.com) · [Security policy](https://github.com/577Industries/.github/blob/main/SECURITY.md) · [Contributing](https://github.com/577Industries/.github/blob/main/CONTRIBUTING.md) · [Repo standards](https://github.com/577Industries/.github/blob/main/docs/repo-standards.md) © 2025–2026 577 Industries Incorporated · Columbus, Ohio · Apache 2.0 except where noted diff --git a/profile/assets/avatar.png b/profile/assets/avatar.png new file mode 100644 index 0000000..bf2f114 Binary files /dev/null and b/profile/assets/avatar.png differ diff --git a/profile/assets/banner-dark.png b/profile/assets/banner-dark.png new file mode 100644 index 0000000..b705b1f Binary files /dev/null and b/profile/assets/banner-dark.png differ diff --git a/profile/assets/banner-light.png b/profile/assets/banner-light.png new file mode 100644 index 0000000..299956e Binary files /dev/null and b/profile/assets/banner-light.png differ