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
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ authors:
cover_image: "/images/blog/neurotechnology-hero.webp"
areas:
- neurotech
unlisted: true
---
<figure class="post-figure post-hero"><img src="/images/blog/neurotechnology-hero.webp" alt="Neurotechnology: bridging minds and machines for human flourishing." /></figure>

Expand Down
11 changes: 11 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ const nextConfig: NextConfig = {
},
async redirects() {
return [
// Preserve shared preview links when the approved Neuro article goes live.
{
source: '/blog/preview-neurotech-4972678300d0a37a2a1e0b9d1b40e852/',
destination: '/blog/neurotech-frontier-human-flourishing/',
permanent: true,
},
{
source: '/blog/preview-neurotech-ea88a298/',
destination: '/blog/neurotech-frontier-human-flourishing/',
permanent: true,
},
{
source: '/areas/upgrade-economies-governance/:path*',
destination: '/areas/economies-governance/:path*',
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"build": "node scripts/build-content.mjs && next build",
"start": "next start",
"generate-jwk": "node scripts/generate-jwk.js",
"test": "node --test scripts/velocity/*.test.mjs scripts/neuro-content.test.mjs"
"test": "node --test scripts/velocity/*.test.mjs scripts/neuro-content.test.mjs scripts/neuro-publication.test.mjs"
},
"dependencies": {
"@atproto/api": "^0.18.17",
Expand Down
6 changes: 6 additions & 0 deletions public/feed.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
<description>Driving Breakthroughs in Computing to Push Humanity Forward.</description>
<atom:link href="https://www.plrd.org/feed.xml" rel="self" type="application/rss+xml"/>

<item>
<title><![CDATA[Neurotech as a Frontier for Human Flourishing]]></title>
<link>https://www.plrd.org/blog/neurotech-frontier-human-flourishing/</link>
<pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
<description><![CDATA[PL Neuro exists to break bottlenecks: to define the milestones neurotech and NeuroAI need, drive the research that shifts what's believed possible, and route talent and capital to some of humanity's hardest and most important problems.]]></description>
</item>
<item>
<title><![CDATA[Adam Marblestone — We Are Massively Underinvesting in the Human Brain]]></title>
<link>https://www.plrd.org/talks/jbp-adam-marblestone/</link>
Expand Down
7 changes: 7 additions & 0 deletions public/search-index.json
Original file line number Diff line number Diff line change
Expand Up @@ -1693,6 +1693,13 @@
"type": "author",
"relpermalink": "/authors/zixuan-zhang/"
},
{
"title": "Neurotech as a Frontier for Human Flourishing",
"summary": "PL Neuro exists to break bottlenecks: to define the milestones neurotech and NeuroAI need, drive the research that shifts what's believed possible, and route talent and capital to some of humanity's hardest and most important problems.",
"date": "2026-09-09T00:00:00.000Z",
"type": "blog",
"relpermalink": "/blog/neurotech-frontier-human-flourishing/"
},
{
"title": "We Gave a Village Personal AI Agents. Here's What Happened",
"summary": "Edge City and Cosmos Institute gave 239 residents of Edge Esmeralda personal AI agents. Through Simocracy (led by Protocol Labs), residents created 82 Sims with constitutions and values that allocated over $10k in community treasury funding across 35 proposals — an early glimpse of agent-mediated governance.",
Expand Down
46 changes: 46 additions & 0 deletions scripts/neuro-publication.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import { test } from 'node:test'
import ts from 'typescript'

const root = new URL('../', import.meta.url)
const read = (file) => readFileSync(new URL(file, root), 'utf8')
const slug = 'neurotech-frontier-human-flourishing'
const path = `/blog/${slug}/`

test('approved Neuro article is public and discoverable at one clean URL', () => {
const posts = JSON.parse(read('src/data/generated/blog.json'))
const article = posts.find((post) => post.slug === slug)
assert.ok(article, 'The approved Neuro article must have its public slug')
assert.equal(article.unlisted, false)
assert.equal(article.title, 'Neurotech as a Frontier for Human Flourishing')
assert.deepEqual(article.authors, ['sean-escola', 'david-markowitz'])
assert.equal(posts.filter((post) => post.slug.startsWith('preview-neurotech-')).length, 0)
const search = JSON.parse(read('public/search-index.json'))
assert.equal(search.filter((item) => item.relpermalink === path).length, 1)
assert.ok(read('public/feed.xml').includes(`<link>https://www.plrd.org${path}</link>`))
assert.ok(!read('public/search-index.json').includes('/blog/preview-neurotech-'))
assert.ok(!read('public/feed.xml').includes('/blog/preview-neurotech-'))
})

test('Neuro opportunity spaces render as an unordered bullet list', () => {
const article = JSON.parse(read('src/data/generated/blog.json')).find((post) => post.slug === slug)
assert.match(article.html, /<ul>\s*<li>Neural Augmentation \(Brain-Computer Interfaces\)<\/li>\s*<li>Biologically Inspired Intelligence \(NeuroAI\)<\/li>\s*<li>Whole Organism Emulation \(WOE\)<\/li>\s*<\/ul>/)
})

test('Neuro interface wording uses directly rather than invasively', () => {
const article = JSON.parse(read('src/data/generated/blog.json')).find((post) => post.slug === slug)
assert.ok(article.html.includes('how directly they interact with neural tissue'))
assert.ok(!article.html.includes('how invasively they interact'))
})

test('both shared Neuro preview URLs permanently redirect to the published article', async () => {
const { outputText } = ts.transpileModule(read('next.config.ts'), {
compilerOptions: { module: ts.ModuleKind.ESNext },
})
const { default: config } = await import(`data:text/javascript,${encodeURIComponent(outputText)}`)
const redirects = await config.redirects()
for (const preview of ['preview-neurotech-ea88a298', 'preview-neurotech-4972678300d0a37a2a1e0b9d1b40e852']) {
assert.ok(redirects.some((rule) => rule.source === `/blog/${preview}/` && rule.destination === path && rule.permanent === true), `${preview} must redirect permanently`)
}
})
2 changes: 1 addition & 1 deletion src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ function getLatestUpdates(count: number): UpdateItem[] {
title: b.title || b.slug,
date: b.date || '',
type: 'Blog',
permalink: b.external_url || `/blog/${b.slug}`,
permalink: b.external_url || `/blog/${b.slug}/`,
slug: b.slug,
areas: [],
coverImage: b.coverImage || '',
Expand Down
4 changes: 2 additions & 2 deletions src/data/generated/blog.json

Large diffs are not rendered by default.