Skip to content

Commit 84e27a4

Browse files
committed
updated llms generation
Signed-off-by: bidi47 <bidi@apidemia.com>
1 parent 4fb887a commit 84e27a4

7 files changed

Lines changed: 217 additions & 21 deletions

File tree

‎bin/generate-packages‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ printf(
4343
PHP_EOL
4444
);
4545

46+
if ($packageGenerator->getMarkdownFile() !== null) {
47+
printf('Markdown listing written to %s%s', $packageGenerator->getMarkdownFile(), PHP_EOL);
48+
}
49+
4650
if ($report['skipped'] !== []) {
4751
printf('Skipped by ignoreRepos: %s%s', implode(', ', $report['skipped']), PHP_EOL);
4852
}

‎config/autoload/packages.global.php‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* Dotkernel packages listing.
55
*
66
* Consumed by `bin/generate-packages`, which queries the GitHub organisation and writes the
7-
* result to `dataFile`. Credentials are intentionally NOT stored here - the GitHub token lives
8-
* in `config/autoload/local.php` under the `github` key, which is ignored by git.
7+
* result to `dataFile`, and the same data to `markdownFile` for `llms.txt`/`llms-full.txt` to
8+
* pick up. Credentials are intentionally NOT stored here - the GitHub token lives in
9+
* `config/autoload/local.php` under the `github` key, which is ignored by git.
910
*
1011
* `local.php` is merged after every `*.global.php`, so any value below can be overridden locally.
1112
*/
@@ -70,6 +71,7 @@
7071
'zf1',
7172
],
7273
'dataFile' => __DIR__ . '/../../public/dotkernel-packages.json',
74+
'markdownFile' => __DIR__ . '/../../public/dotkernel-packages-oss-lifecycle.md',
7375
'includeArchived' => true,
7476
'timeout' => 10,
7577
'connectTimeout' => 5,
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
title: "Dotkernel Packages OSS Lifecycle | Support status for every dot-* package"
3+
description: "Every Dotkernel package declares its own lifecycle - active, maintenance, security-only or archived - in its OSSMETADATA file, along with the PHP versions it supports."
4+
canonical_url: "http://localhost:8080/dotkernel-packages-oss-lifecycle/"
5+
language: "en"
6+
---
7+
8+
# Dotkernel Packages OSS Lifecycle
9+
10+
Generated 2026-08-28 from each repository's `OSSMETADATA` file.
11+
12+
## Active
13+
14+
- [dot-annotated-services](https://github.com/dotkernel/dot-annotated-services) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel service creation component through laminas-servicemanager and annotations
15+
- [dot-auth-social](https://github.com/dotkernel/dot-auth-social) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Authenticate users through Facebook and return credentials and user details
16+
- [dot-authentication](https://github.com/dotkernel/dot-authentication) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component defining authentication abstractions
17+
- [dot-authorization](https://github.com/dotkernel/dot-authorization) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel authorization service abstractions component
18+
- [dot-cache](https://github.com/dotkernel/dot-cache) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel cache component based on symfony-cache, extending and customizing it
19+
- [dot-cli](https://github.com/dotkernel/dot-cli) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component to build console applications based on laminas-cli.
20+
- [dot-controller](https://github.com/dotkernel/dot-controller) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel controller like middleware component
21+
- [dot-data-fixtures](https://github.com/dotkernel/dot-data-fixtures) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Provide a CLI to allow fixtures
22+
- [dot-debugbar](https://github.com/dotkernel/dot-debugbar) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Middleware on top of maximebf/php-debugbar
23+
- [dot-dependency-injection](https://github.com/dotkernel/dot-dependency-injection) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dependency Injection (DI) handler
24+
- [dot-errorhandler](https://github.com/dotkernel/dot-errorhandler) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Logging Error Handler for Dotkernel
25+
- [dot-event](https://github.com/dotkernel/dot-event) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel event component extending and customizing laminas-eventmanager
26+
- [dot-flashmessenger](https://github.com/dotkernel/dot-flashmessenger) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Flash messenger library for session messages between redirects
27+
- [dot-geoip](https://github.com/dotkernel/dot-geoip) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component based on Maxmind's geoip2/geoip2 package, using their free GeoLite2 databases to provide geographical details about an IP address.
28+
- [dot-helpers](https://github.com/dotkernel/dot-helpers) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Various helper structures and classes
29+
- [dot-log](https://github.com/dotkernel/dot-log) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel log component which implements PSR-3
30+
- [dot-mail](https://github.com/dotkernel/dot-mail) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel mail component based on symfony mail
31+
- [dot-mail-outlook](https://github.com/dotkernel/dot-mail-outlook) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Microsoft Outlook ESMTP email service integration
32+
- [dot-maker](https://github.com/dotkernel/dot-maker) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Programmatically generate Dotkernel project files and directories.
33+
- [dot-navigation](https://github.com/dotkernel/dot-navigation) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel navigation component
34+
- [dot-rbac](https://github.com/dotkernel/dot-rbac) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel RBAC implementation
35+
- [dot-rbac-guard](https://github.com/dotkernel/dot-rbac-guard) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component for authorizing bigger parts of an application
36+
- [dot-rbac-route-guard](https://github.com/dotkernel/dot-rbac-route-guard) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): RBAC guard that use the RoutePermission
37+
- [dot-response-header](https://github.com/dotkernel/dot-response-header) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Configuration of all Response Headers
38+
- [dot-router](https://github.com/dotkernel/dot-router) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel's router component
39+
- [dot-session](https://github.com/dotkernel/dot-session) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel session component extending and customizing laminas-session
40+
- [dot-totp](https://github.com/dotkernel/dot-totp) (PHP ~8.3.0 || ~8.4.0 || ~8.5.0): Time-based One-Time Password (TOTP) authentication to your Dotkernel or Mezzio application — without third-party bundles.
41+
- [dot-twigrenderer](https://github.com/dotkernel/dot-twigrenderer) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component providing twig extensions and customizations
42+
- [dot-user-agent-sniffer](https://github.com/dotkernel/dot-user-agent-sniffer) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel component providing details about a device by parsing a user agent.
43+
44+
## Maintenance
45+
46+
- [dot-authentication-service](https://github.com/dotkernel/dot-authentication-service) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel authentication service component based on zend-authentication
47+
- [dot-authentication-web](https://github.com/dotkernel/dot-authentication-web) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Login/logout flow for web applications to use with dot-authentication service
48+
- [dot-controller-plugin-authentication](https://github.com/dotkernel/dot-controller-plugin-authentication) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel authentication controller plugin component
49+
- [dot-controller-plugin-authorization](https://github.com/dotkernel/dot-controller-plugin-authorization) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel authorization controller plugin component
50+
- [dot-controller-plugin-flashmessenger](https://github.com/dotkernel/dot-controller-plugin-flashmessenger) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel flash messenger controller plugin component
51+
- [dot-controller-plugin-forms](https://github.com/dotkernel/dot-controller-plugin-forms) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel controller plugin for easy access to application defined forms and fieldsets in any controller
52+
- [dot-controller-plugin-mail](https://github.com/dotkernel/dot-controller-plugin-mail) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel mail controller plugin
53+
- [dot-controller-plugin-session](https://github.com/dotkernel/dot-controller-plugin-session) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel session controller plugin
54+
- [dot-doctrine-metadata](https://github.com/dotkernel/dot-doctrine-metadata) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Provides metadata and strategies for extracting and rendering Doctrine entities
55+
- [dot-filter](https://github.com/dotkernel/dot-filter) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel filter component customizing and extending laminas-filter
56+
- [dot-form](https://github.com/dotkernel/dot-form) (PHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0): Dotkernel form component extending and customizing laminas-form
57+
- [dot-hydrator](https://github.com/dotkernel/dot-hydrator) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel hydrator component extending and customizing zend-hydrator
58+
- [dot-inputfilter](https://github.com/dotkernel/dot-inputfilter) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel input filter component extending and customizing zend-inputfilter
59+
- [dot-mapper](https://github.com/dotkernel/dot-mapper) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel mapper pattern implementation
60+
- [dot-paginator](https://github.com/dotkernel/dot-paginator) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Paginator component for dotkernel based on zend-paginator
61+
- [dot-user](https://github.com/dotkernel/dot-user) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel user component providing configurable common user functions and extending the authentication flow
62+
- [dot-validator](https://github.com/dotkernel/dot-validator) (PHP ~8.1.0 || ~8.2.0 || ~8.3.0): Dotkernel validator component extending and customizing zend-validator
63+
64+
## Archived
65+
66+
- [dot-console](https://github.com/dotkernel/dot-console) (PHP ^7.4): DotKernel component to build console applications based on laminas-console - archived on GitHub

‎public/md-articles/best-practice/sql-queries-using-zend-db-select.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "SQL queries using Zend_Db – SELECT"
2+
title: "SQL queries using Zend_Db - SELECT"
33
description: "How to write SELECT queries with JOINs and WHERE IN clauses using Zend_Db, alongside their equivalent raw SQL."
44
author: "Teo"
55
date_published: "2010-06-15"
@@ -8,7 +8,7 @@ category: "Best Practice"
88
language: "en"
99
---
1010

11-
# SQL queries using Zend_Db – SELECT
11+
# SQL queries using Zend_Db - SELECT
1212

1313
## TL;DR
1414

‎src/App/src/Factory/PackageGeneratorFactory.php‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use function assert;
1212
use function is_array;
1313
use function is_scalar;
14+
use function is_string;
1415

1516
class PackageGeneratorFactory
1617
{
@@ -39,12 +40,18 @@ public function __invoke(ContainerInterface $container): PackageGenerator
3940
}
4041
}
4142

43+
$markdownFile = isset($packages['markdownFile']) && is_string($packages['markdownFile'])
44+
? $packages['markdownFile']
45+
: null;
46+
4247
return new PackageGenerator(
4348
$client,
4449
(string) ($packages['dataFile'] ?? 'data/dotkernel-packages.json'),
4550
(string) ($github['org'] ?? 'dotkernel'),
4651
$ignoreRepos,
4752
(bool) ($packages['includeArchived'] ?? true),
53+
$markdownFile,
54+
(string) ($config['application']['url'] ?? ''),
4855
);
4956
}
5057
}

‎src/App/src/Service/LlmsGenerator.php‎

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class LlmsGenerator
3535
'middleware',
3636
'architecture',
3737
'design-pattern',
38+
'how-to',
39+
'best-practice',
3840
];
3941

4042
/**
@@ -43,8 +45,6 @@ class LlmsGenerator
4345
* @var list<non-empty-string>
4446
*/
4547
private const OPTIONAL_CATEGORIES = [
46-
'best-practice',
47-
'how-to',
4848
'javascript',
4949
'php-troubleshooting',
5050
'licensing',
@@ -106,7 +106,7 @@ public function write(): int
106106
}
107107
$optionalCategoryCount++;
108108
foreach ($postsByCategory[$slug] as $entry) {
109-
$optionalLines[] = $this->buildPostLink($slug, $entry);
109+
$optionalLines[] = $this->buildOptionalPostLink($slug, $entry);
110110
}
111111
unset($postsByCategory[$slug]);
112112
}
@@ -197,6 +197,22 @@ private function buildPostLink(string $slug, array $entry): string
197197
);
198198
}
199199

200+
/**
201+
* @param array{post: Post, title: string, description: string} $entry
202+
*/
203+
private function buildOptionalPostLink(string $slug, array $entry): string
204+
{
205+
return sprintf(
206+
'- [%s](%s/%s/%s.md) *(%s)*: %s',
207+
$entry['title'],
208+
$this->baseUrl,
209+
$slug,
210+
$entry['post']->getSlug(),
211+
$entry['post']->getCategory()->getName(),
212+
$entry['description'],
213+
);
214+
}
215+
200216
/**
201217
* @return array{title: string, description: string}
202218
*/
@@ -272,15 +288,16 @@ private function extractFrontMatterField(string $contents, string $field): ?stri
272288

273289
private function buildHeader(): string
274290
{
275-
$intro = '> Dotkernel is the technical blog for the Dotkernel headless PHP platform - a PSR-15 '
291+
$intro = '> dotkernel.com is the technical blog for the Dotkernel headless PHP platform - a PSR-15 '
276292
. 'compliant application built on Mezzio and Laminas components. It publishes architecture '
277293
. 'write-ups, how-tos, and release notes for the platform applications - Dotkernel API, Admin '
278294
. 'and Queue - and for the standalone Dotkernel Light skeleton.';
279295

280296
$body = 'Content spans foundational PHP/middleware architecture (PSR-7, PSR-15, request lifecycle, '
281297
. 'dependency injection), practical how-tos (Doctrine migrations, CORS, authentication, caching), '
282298
. 'and the history/release notes of the Dotkernel ecosystem going back to 2008. Posts are organized '
283-
. 'by category and attributed to an author; URLs follow the pattern `/{category-slug}/{post-slug}/`.';
299+
. 'by category and attributed to an author; URLs follow the pattern `/{category-slug}/{post-slug}/`. '
300+
. 'Each post also has a Markdown version at `/{category-slug}/{post-slug}.md`.';
284301

285302
$about = 'the team behind Dotkernel - how the team works, its commitment to open source and the PHP '
286303
. 'community, and how it uses AI under guardrails';
@@ -289,9 +306,7 @@ private function buildHeader(): string
289306
. $intro . "\n\n"
290307
. $body . "\n\n"
291308
. "## Docs\n\n"
292-
. "- [Blog]({$this->baseUrl}/blog/): full list of posts, most recent first, paginated\n"
293-
. "- [Categories]({$this->baseUrl}/categories/): all categories with post counts\n"
294-
. "- [OSS Package Lifecycle]({$this->baseUrl}/dotkernel-packages-oss-lifecycle/): "
309+
. "- [OSS Package Lifecycle]({$this->baseUrl}/dotkernel-packages-oss-lifecycle.md): "
295310
. "support/maintenance status of Dotkernel's open-source packages\n"
296311
. "- [Contact]({$this->baseUrl}/contact/)\n\n";
297312
}

0 commit comments

Comments
 (0)