Журнал изменений

Официальный сайт SLAED CMS

Журнал изменений

Фильтр и поиск

Всего: 1275 Доступных коммитов | Отфильтровано: 1275 Коммиты | Страница: 1 из 128
Сегодня (16.10.2026)
Feature: The API routes to declared services through its guards, and the admin cockpit reads the real OPcache
Автор: Eduard Laas | Дата: 00:33 16.10.2026

Step 78, batch 2 of docs/11-UPDATE-2026.md: the core of the connector without clients. A path v<n>/<service>/<action> reaches a core service or the api.php of an active module through the guards of .rules/api.md in their fixed order, and every reply is the envelope or, for an action that declares reply file, a stored file. Beside it the admin stand gets hover panels on its cockpit, the presentation shows the real OPcache, and the spelling "кеш" becomes the standard of the panel.

Core changes:

  1. Router (core/classes/api/router.php, error.php, client.php):
  2. getResponse() runs route, maintenance and switches, CORS, the flood of the address, auth, size and input, then the handler; every refusal is an ApiError of the closed code list

    • An action with a key or a secret answers 401 until the clients of the connector exist; a public one is called
with the guest ApiClient
  • A preflight is answered 204 without auth; a foreign Origin is 403, a listed one is echoed on every reply
  • A request reads only the service its path names; a declaration with an unknown key, a key action without a scope of its service, a public action that is not GET or an unknown param type is refused whole, logged, and answers 500

  • The common.php of a module loads after the last guard; a fault of a handler is logged under the request id and answers 500 internal without a word of the reason

  • setApiReply() writes the envelope, a 204 without body or type, or hands a file to getFileStream()

    • The mode file takes only a file below storage/update/ or the upload root, so a slip sends no dump or journal
    • A reply that cannot be encoded becomes 500 internal; a public cached action is public, max-age only without
Authorization
  1. Input and limits (core/classes/api/input.php, limit.php, core/classes/cache.php):
  2. ApiInput reads the declared params by type: num, word, text, json, ver; a param without def is required, an undeclared one is dropped, a refusal is the 422 that names the param; a body must be a JSON object

  3. ApiLimit keeps a token bucket per address in the file cache under a keyed hash; IPv6 counts by its /64 and a mapped IPv4 as IPv4

  4. Cache::setDirPath() becomes public for the buckets
  5. Services and settings (core/classes/api/services/system.php, config/api.php, tools/api.http, .gitignore):
  6. system/ping answers the empty success; system/schema is the live reference of the public actions, built from the declarations and kept a minute by a public cache

  7. config/api.php holds active, maint, off, the global CORS list and the limits flood, burst and size
  8. tools/api.http carries the requests for the REST Client; tools/.env is ignored
  9. Tests (tests/Unit/ApiRouterTest.php, tests/Support/route_probe.php, tests/Unit/ApiEntryTest.php):
  10. The probe mode router writes three modules for the run and proves the route, versions, the order of the guards pair by pair, typed input, the envelope, the crash log, CORS, the switches, the flood and the mode file

  11. ApiInput and ApiLimit are also tested in-process; ApiEntryTest expects the answering system/ping
  12. Admin stand and presentation (public/demo/admin/*, modules/presentation/index.php, theme lite presentation.css, partials/presentation-hero.html):

  13. Every ring and the lamp of the cockpit open the bell panel on hover; the lamp lists only broken signals
  14. The cache ring of the presentation shows the hit rate of the real OPcache, or off when it is disabled
  15. The lamp of the presentation is the one-colour mark of the theme masked in the tone of the state, no second coloured logo beside the header

  16. Spelling and documentation (admin/lang/ru.php, admin/info/*, modules/changelog/admin/info/ru.md, config/presentation.php, docs/*):

  17. "кеш" instead of "кэш" in the constants, the help and the presentation text
  18. .rules/api.md gains the action key reply (owner, 2026-10-15); docs/2027-CONNECTOR.md, docs/ARCHITECTURE.md, docs/2027-ADMIN-UX.md, the plan and the roadmap follow

Benefits:

  • A module offers an API by one declaration file, without a line of the core naming it
  • Every refusal has one shape, and no reply of the API carries a reason, a path or HTML

Technical notes:

  • New config file config/api.php; a site without it runs the API on with the shipped limits
  • No schema or URL change; the site and the panel answer as before
  • Full phpunit green: 1865 tests, 24889 assertions, 14 skipped
Вчера (15.10.2026)
Feature: The plate of the presentation becomes the state lamp, and the admin stand gets a cockpit of the system
Автор: Eduard Laas | Дата: 22:53 15.10.2026

The central plate of the presentation cockpit drops its name and caption and becomes a lamp: the mark alone in the tone of the system state, with a ring that breathes only while something waits. The admin stand shows the same cockpit over its home page, with gauges that drift as a live panel would.

Core changes:

  1. Presentation (modules/presentation/index.php, lang/*.php):
  2. The plate carries the theme, the logo and a tone instead of a name and a caption
  3. The query gauge reads "sql" under the new constant _PRES_QUERY in all six locales; the Russian and Ukrainian _PRES_QUERIES lose their hyphen

  4. Theme lite (presentation.css, partials/presentation-hero.html):
  5. The plate takes its border, halo, glow and dashed orbit from currentColor, set by data-sl-tone, and a pulsing ring that stays still in the success tone

  6. The mark fills the plate; the arcs of the rings take round ends on track and value
  7. The figure of a gauge stands in the centre of the dial and its caption in the mouth of the arc
  8. Admin stand (public/demo/admin/index.html, admin.css, admin.js):
  9. A cockpit over the home: the state line, gauges of CPU, RAM, disk and cache round a state lamp, a strip of generation, queries, PHP memory and visitors online, and the signals the lamp sums

  10. setCockpit() lets each gauge drift round its value every three seconds and retones the server gauges by the thresholds of getPercentTone()

Benefits:

  • One state lamp reads the same on the site and in the panel
  • A calm system shows a steady glow, so motion itself is the alarm

Technical notes:

  • The stand is static demo markup; no core, schema or route change
  • New language constant _PRES_QUERY in six locales
Feature: The API gets its one entry in index.php, boots a light core and answers only in JSON
Автор: Eduard Laas | Дата: 22:52 15.10.2026

Step 77, batch 1 of docs/11-UPDATE-2026.md: a path under /api/ defines API_FILE and boots the core without theme, template, parser, visual classes, session or the layer of the user, and ApiRouter answers it before a line of the site runs. The router knows no route yet, so every path answers 404 no_route; the guards and the services follow in batch 2.

Core changes:

  1. Entry (public/index.php, core/stream.php):
  2. A path under api/ is the branch of the API, taken after the light path of uploads/ and before the site
  3. getUploadRequest() becomes getRequestPath($dir), which reads both uploads/ and api/

    • MODULE_FILE stays defined in the API, core/stream.php needs it before the branch is known
  4. Light core (core/system.php, core/classes/api/router.php):
  5. Under API_FILE the core loads config, database, security, logger, cache, mail, geoip, route, the class map of Node and the helpers; theme, Template, Parser, captcha, oauth, field, point, rating, comment, quick, privat, editor, core/user.php and core/admin.php stay out

  6. ApiRouter::getResponse() returns the reply, ApiRouter::setApiReply() is the one writer of status, headers and the envelope of .rules/api.md: ok, data or error with code and text, meta with id, ver, ms and now

    • A valid X-Request-Id is echoed, any other is replaced; every reply is no-store and nosniff
  7. Security in the API (core/security.php, core/classes/pdo.php):
  8. No cut of the path, no ?error= page, no session, no flood check by session, no visitor or language cookie
  9. The request scan of the site is skipped: ApiInput is the filter of the API, so v=../8.0.1 becomes a 422 there and never a ban of the caller here

  10. Errors are never displayed; a ban answers 403 no_scope, a lost database, an uncaught exception or a fatal error 500 internal, all in JSON without a word of the reason

  11. Tests (tests/Unit/ApiEntryTest.php, tests/Support/route_probe.php, tests/Support/route_web.php):
  12. The probe mode entry drives the real index.php and admin.php: the envelope, the files the light core loads, the session state at the end of a request, a deep path, a POST, a HEAD, the scan, a ban, a lost database, and the site and the panel beside it

    • Five deliberate regressions of the core were each caught by the test
  13. Documentation (docs/ARCHITECTURE.md, docs/11-UPDATE-2026.md, docs/ROADMAP-2026.md):
  14. The entry of the API in "Entry Points"; step 1 of the plan and step 77 of the roadmap closed

Benefits:

  • A fault of a page can never render into a reply of the API, and a reply of the API never carries HTML
  • An API request costs no theme, template or session

Technical notes:

  • No schema, URL or config change; the site, the panel and setup.php answer as before
  • Full phpunit: 1855 tests, one failure in AssetVersionTest from a stale config/local.php of the stand after a change of presentation.css outside this step; green after the cache was rebuilt

Docs: The updater verifies a signature without sodium, reads an archive without zip, and leaves the files a site writes
Автор: Eduard Laas | Дата: 21:56 15.10.2026

Step 76, batch 0 of docs/11-UPDATE-2026.md: the two open questions are answered by the owner after probes on the stand and the console, and the baseline of the suite is recorded. A site without sodium or zip still receives every release, and a release no longer overwrites the sitemap and robots.txt a site writes for itself.

Core changes:

  1. Decisions (docs/11-UPDATE-2026.md):
  2. Without sodium the core verifies the signature with a bundled paragonie/sodium_compat, loaded only when the extension is missing; signing stays on real sodium

  3. Without zip the archive is read by PharData; Update walks the central directory itself and applies every refusal to the raw names, the same for both readers

    • PharData drops ../x and /x silently, loses the symlink mode and throws on a backslash, so its names prove nothing
  4. The nginx access log of slaed.net goes without the query string for /api/v1/master/, so the privacy note keeps its promise

  5. public/sitemap.xml leaves git; public/robots.txt is a site file in files.json, placed only when missing
  6. The whole tree ships; nothing beyond the named export-ignore entries leaves the archive
  7. Plan sections and steps (docs/11-UPDATE-2026.md):
  8. The client, the refusals, the privacy, the help and the tests follow the decisions; steps 3, 6 and 10 carry them
  9. "Open questions" becomes "Probes of step 0": stand extensions and opcache, write rights and one device, the speed of sodium_compat, PharData on the tree archive and on hostile entries, the archive size, the suite baseline

  10. Roadmap (docs/ROADMAP-2026.md):
  11. Step 76 is closed with its decisions

Benefits:

  • A site on a host without sodium or zip is not left blind to updates forever
  • One set of refusals holds whichever reader opens the archive

Technical notes:

  • Plans only; no code, theme or schema change
  • Baseline: full phpunit green, 1849 tests, 24477 assertions, 14 skipped
Docs: The update plan takes three audits, fetches only from slaed.net, runs the installer of the new package, and ships its help
Автор: Eduard Laas | Дата: 20:55 15.10.2026

Three audits of docs/11-UPDATE-2026.md were checked against the code and folded in. The site fetches releases only from slaed.net, the installer comes from the verified new package while the installed rescue keeps the way back, and the parts of 8.0.0 that no later release can fix are frozen as contract version 1.

Core changes:

  1. Sources, signature and release (docs/11-UPDATE-2026.md):
  2. The client fetches only from slaed.net, with no redirect; GitHub Releases stay for people, and a GitHub mirror can come in 8.x if the traffic of slaed.net demands it

    • the manifest carries no URL; versions are strictly X.Y.Z, the code name is the constant SLAED_CODENAME
  3. Order of a release: build, sign, rehearse, publish; the tag stays local until publish

    • publish refuses test factory keys and an archive without a green rehearsal of its hash
    • build refuses an archive grown by more than 20 % until --max confirms it
    • the delta compares two files.json lists; the first release after 8.0 is an empty 8.0.1
  4. A pause withdraws the offer: the found version is reset and a manual upload needs the manifest the master serves now
  5. Installation and rollback (docs/11-UPDATE-2026.md):
  6. Contract version 1 frozen in 8.0.0: the apply.lock schema, the backup layout, the entry of the portioned dump, and the call of the rescue by the entry guard

  7. The executor run/apply.php is copied from the verified new package; core/rescue.php is replaced only at step 8
  8. All three entry points answer 503 before the core while apply.lock exists or the schema lags the code; the rescue form goes straight to the installed rescue

  9. The new Backup mode dumps in portions without InnoDB and only the table list of the site fixed at preflight; the restore drops only tables created by the failed install

  10. Database steps run before the config merge in the light boot UPDATE_FILE, with its own admin login; the manual path goes through it on a closed site

  11. Every rollback returns files, config/ with the step marks and the database, then clears opcache, config/local.php and the page and asset caches

  12. The config merge is recursive with lists kept whole; config/ files stay out of the integrity check and deletion
  13. Preflight checks opcache reset rights and the database privileges of the dump; a self-check and a dry run follow
  14. Master (docs/11-UPDATE-2026.md):
  15. master/file is read-only; the rollout cohort is crc32 of sid and version; the flood guard counts IPv6 per /64
  16. The scheduler task masterwatch pauses a release by its failure rate and mails the owner
  17. Help in the panel (docs/11-UPDATE-2026.md):
  18. admin/info/update/ru.md and modules/master/admin/info/ru.md are written by the step that builds each part; the help of the scheduler, languages and templates follows; a step is not done without its help

  19. Roadmap (docs/ROADMAP-2026.md, docs/2027-ADMIN-UX.md):
  20. The update plan is batches 0-11 at steps 76-87; the database batch is split from the installation batch
  21. DIAL moves to step 88 after the updater; Close stays last at 89

Benefits:

  • A fault of the installer is fixed by the next release instead of being frozen into every site
  • No path of the plan runs new code on an old schema or overwrites tables of another installation

Technical notes:

  • Plans only; no code, theme or schema change
Docs: The updater enters 8.0 with its own plan, the API becomes a branch of index.php, and the admin stand takes the sounds and the Phoenix screensaver
Автор: Eduard Laas | Дата: 18:06 15.10.2026

A site learns of an update only by code it already has, so the updater is planned before the release: docs/11-UPDATE-2026.md designs signed releases, the module master on slaed.net and the core page "Обновления", and roadmap steps 77-87 carry it. The admin stand shares the sound engine and the Phoenix scene with the labs.

Core changes:

  1. Update plan (docs/11-UPDATE-2026.md, docs/ROADMAP-2026.md):
  2. The owner's decisions of 2026-10-15: Ed25519 offline signature, primary and recovery keys, GitHub Releases first and slaed.net second, a full archive and a delta, installation in steps with rollback and rescue

    • the master is the module master, kept in the repository and out of the release archive
    • settings get missing options added, languages and the themes admin and lite are replaced whole
  3. Roadmap steps 77-87 are the batches 0-10 of the plan; Close moves to step 88
  4. Connector and entry (docs/2027-CONNECTOR.md, docs/2027-VINE-MONITOR.md, docs/ARCHITECTURE.md):
  5. The API is the branch /api/ of public/index.php instead of an own public/api.php
  6. Steps 1-2 of the connector and the service update move into the update plan; the connector starts at step 3
  7. Ideas after the release (docs/2027-IDEAS.md):
  8. Numbered raw ideas: automatic security fixes, a public "SLAED in numbers" page, error reports by consent
  9. Admin stand (public/demo/admin/*, public/demo/assets/sound.js, public/demo/assets/phoenix-scene.js):
  10. The sound engine window.slSound leaves the sound lab for a shared file; the admin stand plays its sounds
  11. The Phoenix scene and its rest timer window.slPhoenix move into their own file; the admin stand runs the screensaver after a rest

    • public/demo/phoenix.html, public/demo/snd-01-lab.html and public/demo/assets/phoenix.js load the shared files

Benefits:

  • Every 8.0 site can receive 8.0.1 without its owner visiting slaed.net
  • One sound engine and one Phoenix scene for every stand page

Technical notes:

  • Plans and stand pages only; no core, theme or schema change
Feature: The stand plays one Phoenix screensaver after a minute of rest, and a lab picks the sounds of the system
Автор: Eduard Laas | Дата: 00:55 15.10.2026

The Phoenix stand had fifteen separate faces of the logo; three of them are merged into one screensaver of sixty seconds that starts after a rest of the hand, runs in a circle and fades out when the hand comes back. A second stand page lets the owner hear and choose the sounds of messages, mentions, alerts, wins and moderation before a standard of sound is written.

Core changes:

  1. Screensaver (public/demo/assets/phoenix.js):
  2. One scene on its own clock in acts: the page dims to 75% while the code of the system rains in, sparks rise from the code into a giant A, the A falls to ash, the ash takes fire into the big logo whose letters grow around the A, the logo falls to ash and flies pixel by pixel into the header, falls again and becomes the real logo

    • one particle for the whole scene, a square of smouldering ash; colours change by ramps, dots sit on whole
screen pixels, the rain is made of lines of core/system.php
  • the quiet: ash rises from the foot of the page and every six seconds the beam of the installer crosses the
letters of the logo, sparks leave the A and the version badge flashes
  • Chance comes from a seed and the ash moves in fixed steps, so any second can be reached by seeking
  • Screensaver rules: it starts after the chosen rest on the page (60 s by default), loops while nobody wakes it, a move, a key, a wheel or a scroll fades it out in 0.8 s; the quiet stays on as the ground of the page

    • the measures of a round are taken when it starts, the beam follows the logo where it is now
    • prefers-reduced-motion and the Motion option skip the scene and show the end state
  • The fourteen other faces and their machinery are removed
  • Stand player (public/demo/phoenix.html):
  • The dock is a player: play and pause, a stopwatch, a scrubber, chapters per act, speed 1/4, 1/2 and 1, the rest before the screensaver (10 s, 60 s, 5 min, off) and Launch (R)

    • its clicks and keys neither wake nor count as the hand on the page; a paused player is left alone
  • Styles (public/demo/assets/phoenix-fx.css):
  • Only what the screensaver uses: the ground over and under the page, the dimming veil next to it, the badge that springs out and shines with every beam

  • Sound lab (public/demo/snd-01-lab.html):
  • Zones with variants: personal messages in and out, mentions and replies, alerts in their five theme tones (error, warn, success, info, accent, each with a silent choice), wins, the moderation queue

    • synthesised voices in D minor, the key of the Phoenix theme, and three cuts of its strongest moments
  • Rules shown live: a sound always with a counter and the number in the tab title, one sound per category in 2.5 s, quiet on an open tab for what comes from others, full for the answer to one's own action, only alerts that appear sound, the silent switch of the phone where Safari allows it

  • A master switch in sl.sound (1 or 0) next to sl.motion; zones, variants and volume in sl.sound.set

Benefits:

  • One screensaver that tells the return of the system and gets out of the way the moment it is not wanted
  • The sounds are chosen by ear on a working page before any of them goes into the theme

Technical notes:

  • Stand pages only (public/demo/); no theme, core or schema change
  • Music in the screensaver was weighed and left out: it is the default effect of the system
Feature: The Phoenix presentation sets its words in Magistral, marks its technology with icons, and ships its videos rendered again
Автор: Eduard Laas | Дата: 00:55 15.10.2026

Version 1.0.4 of the presentation package. The headings, the texts and the captions take the brand face Magistral instead of Segoe UI and the monospace face, which stays only where code is shown, and the six videos are rendered again from the browser frames with the new face.

Core changes:

  1. Face (public/phoenix/vendor/base.css, public/phoenix/player/styles.css, public/phoenix/index.html):
  2. base.css gets the token --sl-face-body, Magistral with Arial and sans-serif behind it
  3. The stage, the header, the kicker, the archive captions, the continuity row, the editor head, the build bar, the modules, the technology row, the HUD, the history and the controls use --sl-face-body

    • the code of the editors and the continuity listings keep --sl-face-mono
  4. index.html stamps base.css ?v=2 and styles.css ?v=4
  5. Technology row (public/phoenix/index.html):
  6. Every item of the final row carries its Bootstrap icon: release, PHP, MariaDB, core, light and dark
  7. Videos (public/phoenix/exports/*.mp4, public/phoenix/presets/production/video-fullhd.json):
  8. The dark and light videos in 1080x1920, 1920x1080 and 720p are rendered again with the new face
  9. The production preset records the faces and their WOFF2 files
  10. Package (public/phoenix/manifest.json, public/phoenix/checksums.json, public/phoenix/README.md):
  11. Version 1.0.4 of 2026-10-14; checksums of the changed files
  12. README says the texts are set in Magistral, the marks use Bootstrap Icons, and both WOFF2 files match the originals of the lite theme byte for byte

Benefits:

  • The presentation speaks in the face of the brand, in the player and in every video

Technical notes:

  • The WOFF2 files were already in the package; nothing new is loaded
  • No change outside public/phoenix/
Docs: The requirements and the help say what a server must do for readable addresses, which cannot be turned off
Автор: Eduard Laas | Дата: 00:54 15.10.2026

Readable addresses are the only form of a page address since 2026-10-14. The README and the help of the settings now state the one thing a server must do for them, so an installation on a server without the rule does not end with a start page that opens and every other page answering 404.

Core changes:

  1. Requirements (README.md):
  2. Web Server names Apache or LiteSpeed with mod_rewrite and nginx with the server block of nginx.conf.example

    • another PHP-capable server (IIS, Caddy) needs its own rule: every path that is no file or folder goes to index.php
  3. The server section adds what happens without that rule: the start page opens, every other page gets the 404 of the server

  4. Help of the settings (admin/info/config/ru.md):
  5. Page addresses and canonical: readable addresses are the only form and cannot be turned off; the separators / and - are fixed

    • the server rule, public/.htaccess for Apache and LiteSpeed, try_files of nginx.conf.example for nginx

Benefits:

  • An administrator learns the server requirement before the installation, not from a site that answers 404

Technical notes:

  • Text only; no code, template or schema change
Эта неделя (14.10.2026)
Docs: Readable addresses enter the permanent reference, both servers answer every address alike, and the plan is closed
Автор: Eduard Laas | Дата: 15:32 14.10.2026

Batch 8 of docs/10-URL-2026.md (roadmap step 75): what lasts of the plan moves into the reference, the help of the panel and of the modules, and the plan is deleted. A live check of every address and every printed link on Apache (root on public/ and on the project) and on nginx found a redirect loop, a served dot file and a hard-coded link; all three are fixed.

Core changes:

  1. Reference (docs/ARCHITECTURE.md, docs/NODE.md, docs/TEMPLATES.md, docs/VERSIONS.md, docs/TESTS.md, README.md, UPGRADING.md):

  2. docs/ARCHITECTURE.md gets "Address Boundary": the address table, the registry _routes and the class Route, the name, when an entity gets and changes its path, migration, parsing, building and the one redirect

    • the bootstrap, the routing keys, the front controller and "What Not To Assume" follow it
  3. docs/NODE.md: the permanent type name, Route::checkTypeName(), "Addresses" of a type, the paths of the writers, page in place of num, the 301 of setSeoMove(), the canonical and href on paths

    • the operation attach, which getNodeOps() no longer has, leaves "Public routes"
  4. docs/TEMPLATES.md: {{ root }}, the key route of setHead() and "Links In Templates"
  5. docs/VERSIONS.md records the addresses of 2026-10-14 with their breaking changes; UPGRADING.md gets "Readable Addresses"; README.md the routing and the cut of the path; docs/TESTS.md the five Route tests

  6. Help of the panel and the modules (admin/info//ru.md, modules//admin/info/ru.md):
  7. config: page addresses and canonical, 301 and 410, where forcessl and forcehost act
  8. security: dot files refused, DirectorySlash Off in the project mode, the front controller required
  9. editor, scheduler: the front-controller rule must stay, the sitemap task writes the Sitemap line
  10. privat, search: /account/privat/123 and /search; template: {{ root }}
  11. categories, node, voting: the field Address; account: a new login moves the profile address, the OAuth redirect URI keeps its query form on purpose

  12. Servers (.htaccess, public/.htaccess, nginx.conf.example):
  13. The project .htaccess turns off DirectorySlash, which sent /docs to the folder docs/ of the project and back to /docs in an endless loop when the document root is the project

  14. public/.htaccess and nginx.conf.example refuse every dot file or folder but .well-known/; nginx served /.htaccess with 200

  15. Theme (public/templates/lite/partials/site-footer.html):
  16. The ideas button links the path of its forum section instead of forum?cat=95, which answered 301
  17. Plan closed (docs/10-URL-2026.md, docs/ROADMAP-2026.md, tests/Unit/Route*Test.php, tests/Support/registry_probe.php, docs/2027-CONNECTOR.md, docs/2027-VINE-MONITOR.md):

  18. The plan file is deleted, step 75 ticked; the tests and the 2027 plans point at "Address Boundary"
  19. Connector plan (docs/2027-CONNECTOR.md):
  20. Full, safe administrator access for AI agents over MCP (owner, 2026-10-14): off by default, a risk class per action with an owner-set policy, short-lived keys, a fixed list of actions no agent gets, an audit trail

    • api_client gains aid and policy, the table api_confirm holds confirmations, config/api.php the key risk
    • a confirm policy answers input_required; a user key stays draft-only

Benefits:

  • The reference and the help describe the addresses as they work, with nothing left in a plan
  • Apache with either document root and nginx give the same answer to every address

Technical notes:

  • Live check: route matrix 57/57 and about 890 printed links on all three configurations, no relative address, no link answering 301, no missing-route warning in the log

  • The stand's nginx file .osp/nginx/slaed.loc.conf (outside the repository) got the same dot-file refusal
  • Breaking: a dot file in public/ is no longer served; a server whose document root is the project needs DirectorySlash Off, which the shipped .htaccess carries

  • No code or schema change besides the server files and one template link

Страница 1 из 128. Всего: 1275

1 2 3 4 5 6 7 8 9 10 … 128
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр