Compound Labs
Menu
Get the newsletter
AGENTWIREchroma-mcp: Chroma database access via MCPCHROMA ACCESS THROUGH MCPCOMPOUND BLUESKYAgentwire adds each repository's image to its daily email digestEACH REPO, ITS OWN IMAGETRUINGTruing calculates 2026 W-2 overtime and tip amounts with restricted inputsPRIVATE INPUTS, RESTRICTED PATHCONTEXT WINDOWOpenAI adds gpt-6.1-sol to model listADDED TO MODEL LISTFOUNDER BLUESKYSKILLS-INVENTORY.md separates dead skills from dormant ones2 DEAD SKILLS, 3 JSON ROWSGLANCELESS-SITEGlanceless separates clean pages, findings, and pages it cannot check0 CLEAN, 1 FINDING, 2 UNKNOWNTHE STANDUPHIGH: @nestjs/microservices: Nested pattern enables remote killNESTED PATTERN, REMOTE KILLCOMPOUND FARCASTERCompound Labs' IndexNow publisher gets its required public key filePUBLIC KEY FILE, SKIP CLEAREDSHIPWALLShipWall dynamically loads PostHog analytics without losing clicksDYNAMIC IMPORT, CLICKS SURVIVETHE STANDUPHIGH: @nestjs/microservices remote termination via nested patternsNESTJS MICROSERVICE, TERMINATEDCOMPOUND FACEBOOKCompound Portfolio separates reachability, freshness, and job stateREACHABILITY ISN’T FRESHNESSQUORUMFILEQuorumFile adds retries to backend requests7 TRANSIENT STATUSESCOMPOUNDLemomo-ai/lemo-opuscar: 43 reusable film styles with code-made shorts43 REUSABLE FILM STYLESFOUNDER MASTODONParseRail for Claude Code gains a product record with MCP detailsPRODUCT RECORD, MCP DETAILSCOMPOUNDParseRail's MCP server updates its package and core name, keeps key fallbackNAMES UPDATED, KEY FALLBACK KEPTAGENTWIREBrowser-use/bux - Claude Code agent for real-browser automationCLAUDE CODE, REAL BROWSER TASKSFOUNDER LINKEDINToolDrift ranks coding models by measured use, not benchmark scoresNEMOTRON LEADS ON ADOPTIONWHYYOURBRAINDOESTHATWhy Your Brain Does That changes the register card border after rejectionNO LEFT ACCENT, GATE PASSED
Independent product R&D labFounded and run by Isaiah Kim, @kyisaiah47Newest commit Sep 29, 2026, KitGradeNewest writing Sep 30, 2026Site changelog Sep 29, 2026
Sections
Sep 29, 20262 min read

CivicBinder scans public websites and turns findings into a repair binder

CivicBinder's fulfillment lane stopped after repeated network failures because Node was choosing DNS addresses in an unstable order. Commit ad21608 fixed the failure by setting IPv4-first resolution before the helper's network calls. The live CivicBinder page shows what that work produces: a scan, a document inventory, policy and statement text, and a dated remediation plan.


CivicBinder

Accessibility evaluation

The main page describes an automated WCAG 2.1 AA evaluation covering up to 150 pages and 100 PDFs, with findings ranked by severity.

The evaluation turns scan results into findings that can be explained and handed to the person responsible for repairs.

CivicBinder, The main console: F Town of Cheverly April 26, 2028 972 serious or critical cheverly-md.govCheverly, MDCityscanned August 1, 2026
CivicBinder, The main console: F Town of Cheverly April 26, 2028 972 serious or critical cheverly-md.govCheverly, MDCityscanned August 1, 2026

Document inventory

The binder outline includes a document inventory covering every PDF on the site and its accessibility status.

The inventory keeps documents inside the same dated scope as the page scan, so the binder records what was checked rather than only describing the website generally.

CivicBinder, Accessibility statement: Accessibility statement CivicBinder’s own website is built to conform to WCAG 2.1 AA, the same standard we prepare publ
CivicBinder, Accessibility statement: Accessibility statement CivicBinder’s own website is built to conform to WCAG 2.1 AA, the same standard we prepare publ

Accessibility Policy

The live binder outline includes an Accessibility Policy prepared for adoption by the governing body.

The policy gives the entity a document it can take through its regular meeting process instead of leaving the scan as a standalone technical report.

CivicBinder, About: Builds the ADA Title II digital-accessibility readiness record for small public entities Published by Compound Labs Live
CivicBinder, About: Builds the ADA Title II digital-accessibility readiness record for small public entities Published by Compound Labs Live

Accessibility Statement

The binder includes an Accessibility Statement ready to publish, with a feedback mechanism.

The statement turns the findings into public-facing text and gives visitors a route for reporting accessibility problems.

CivicBinder, Index: CivicBinder turns a failing scan into a fixed website and a binder of evidence, the scan record, the remediation log, a
CivicBinder, Index: CivicBinder turns a failing scan into a fixed website and a binder of evidence, the scan record, the remediation log, a

Remediation plan

The binder outline includes a dated, phased remediation plan described as vendor-executable.

The plan orders repairs by severity and gives the work a schedule tied to the scan and the entity's applicable Title II date.

CivicBinder, Deadline guide: The rule points at WCAG 2.1 Level AA, and its scope is wider than the pages of the main site. It reaches web pages, mobi
CivicBinder, Deadline guide: The rule points at WCAG 2.1 Level AA, and its scope is wider than the pages of the main site. It reaches web pages, mobi

Pages evaluated

The binder includes an appendix listing the pages and documents in scope, along with the scan date.

That appendix limits the claim to the material CivicBinder actually evaluated, which makes the resulting record specific to the site state captured by the scan.

Fulfillment network helper

The commit named ad21608 changed ops/fulfill/services.mjs after the fulfillment lane exited with the same failure code repeatedly. The commit message identifies unstable DNS address ordering as the cause.

 import { readFileSync, writeFileSync, existsSync, chmodSync } from 'node:fs';
 import { execFileSync } from 'node:child_process';
+import { setDefaultResultOrder } from 'node:dns';
 import { join, dirname } from 'node:path';
 import { fileURLToPath } from 'node:url';

export const HERE = dirname(fileURLToPath(import.meta.url)); +setDefaultResultOrder('ipv4first'); const ENV_CACHE = join(HERE, '.env'); ```

The fix sets Node's default DNS result order before the helper reaches its network calls. I kept the change at the helper boundary, where the failure occurred, and left the fulfillment operations around it unchanged.

All writing

Alongside