Skip to content

Commit bb49e92

Browse files
committed
chore(productización): identidad seafood-intelligence-os, guard de drift ES/EN y .gitignore
- package.json: pescamar-unigrade 0.2.0 → seafood-intelligence-os 1.0.0-pilot.1 (nombre alineado con product.ts/README; versión honesta de estado piloto); lockfile actualizado; nada referencia el nombre/versión legacy - index.html/en.html: comentario cruzado idéntico en ambos (son inputs multi-page de Vite; generar uno en build cambiaría la superficie de build/CI/dev) + guard de drift en ux-language-smoke: ambos archivos deben ser byte-idénticos salvo lang y meta description - .gitignore: agrega test-results/ y playwright-report/ (test-results/ quedaba untracked tras cada corrida) - /etiquetas y /cierre-diario verificados: rutas reales con roles, se conservan - README: verificado, sin quick-facts numéricos que hayan derivado (documento cualitativo)
1 parent 6a7906d commit bb49e92

6 files changed

Lines changed: 18 additions & 8 deletions

File tree

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ dist/
66
!.env.example
77
*.tsbuildinfo
88
npm-debug.log*
9+
test-results/
10+
playwright-report/

‎en.html‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<!doctype html>
2+
<!-- ES/EN counterparts: index.html and en.html. Both files are Vite build inputs and must stay identical except for lang and meta description; a drift guard lives in scripts/ux-language-smoke.mjs. -->
23
<html lang="en">
34
<head>
45
<meta charset="UTF-8" />

‎index.html‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<!doctype html>
2+
<!-- ES/EN counterparts: index.html and en.html. Both files are Vite build inputs and must stay identical except for lang and meta description; a drift guard lives in scripts/ux-language-smoke.mjs. -->
23
<html lang="es">
34
<head>
45
<meta charset="UTF-8" />

‎package-lock.json‎

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"name": "pescamar-unigrade",
2+
"name": "seafood-intelligence-os",
33
"private": true,
4-
"version": "0.2.0",
4+
"version": "1.0.0-pilot.1",
55
"type": "module",
66
"engines": {
77
"node": "22.x"

‎scripts/ux-language-smoke.mjs‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ import {readFile} from 'node:fs/promises'
22

33
const failures=[]
44
const assert=(condition,message)=>{if(!condition)failures.push(message)}
5-
const [shell,os,modules,i18n,main,appCss,uxCss]=await Promise.all([
5+
const [shell,os,modules,i18n,main,appCss,uxCss,indexHtml,enHtml]=await Promise.all([
66
readFile(new URL('../src/components/AppShell.tsx',import.meta.url),'utf8'),
77
readFile(new URL('../src/os.ts',import.meta.url),'utf8'),
88
readFile(new URL('../src/pages/Modules.tsx',import.meta.url),'utf8'),
99
readFile(new URL('../src/i18n.tsx',import.meta.url),'utf8'),
1010
readFile(new URL('../src/main.tsx',import.meta.url),'utf8'),
1111
readFile(new URL('../src/app.css',import.meta.url),'utf8'),
1212
readFile(new URL('../src/ux-unification.css',import.meta.url),'utf8'),
13+
readFile(new URL('../index.html',import.meta.url),'utf8'),
14+
readFile(new URL('../en.html',import.meta.url),'utf8'),
1315
])
1416

1517
assert(shell.includes('<strong className="brand-name">PESCAMAR</strong>')&&shell.includes('<small className="brand-product">Seafood Intelligence OS</small>'),'brand must identify Pescamar first while retaining the OS platform context')
@@ -26,6 +28,10 @@ assert(appCss.indexOf("./ux-unification.css")>appCss.indexOf("./uni-qa-polish.cs
2628
assert(uxCss.includes('.workspace-tabs{position:sticky')&&uxCss.includes('min-height:44px'),'shared UX layer must preserve workflow context and mobile touch targets')
2729
assert(uxCss.includes('.page-header>.page-actions')&&uxCss.includes('.inline-field>input'),'shared page actions must remain responsive and readable')
2830

31+
const stripLocaleChrome=(html)=>html.replace(/^<html lang="[a-z]+">$/m,'<html lang="#">').replace(/<meta name="description" content="[^"]*" \/>/,'<meta name="description" />')
32+
assert(indexHtml.includes('<html lang="es">')&&enHtml.includes('<html lang="en">'),'ES/EN entry points must declare their lang before React loads')
33+
assert(stripLocaleChrome(indexHtml)===stripLocaleChrome(enHtml),'index.html and en.html must stay identical outside lang and meta description — update both in lockstep (cross-reference comments point at each other)')
34+
2935
if(failures.length){
3036
console.error('UX language smoke FAILED')
3137
failures.forEach(failure=>console.error(`- ${failure}`))

0 commit comments

Comments
 (0)